View difference between Paste ID: Ehyzn0sV and LcVZ6eX4
SHOW: | | - or go back to the newest paste.
1
static Size GetSizeBMP(Stream inp) {
2
    var b = new byte[24];
3
    inp.Read(b, 0, 24); // ошибка, нужно читать 26 байт,
4
                        // размер изображения хранится в последних восьми байтах из прочитанных
5
6
    List<int> l = new List<int>(); // зачем нужен этот List?
7
                                   // почему его элементы int?
8
                                   // чтобы потом кастовать обратно в byte?
9
    
10
    // в лучших традициях китайского быдлокодинга. цикл не судьба применить?
11
    l.Add(b[16]);
12
    l.Add(b[17]);
13
    l.Add(b[18]);
14
    l.Add(b[19]);
15
    l.Add(b[20]);
16
    l.Add(b[21]);
17
    l.Add(b[22]);
18
    l.Add(b[23]);
19
    // или вообще без циклов:
20
    // var l = b.Skip(16).Select(x => (int)x).ToList(); // вот вам и лямбда, раз так нужен интовый список
21
    // но ведь интовый список не нужен!
22
    // var l = b.Skip(16).ToArray();
23
    // но цикла здесь таки будет достаточно.
24
25
    // адский ад в лучших традициях индусского быдлокодинга: числа в строки -> строки в строку -> строка в число.
26
    // потом еще удивляются: почему это программы тормозят.
27
    var hh = ((byte)l[0]).ToString("X") + ((byte)l[1]).ToString("X") + ((byte)l[3]).ToString("X") + ((byte)l[2]).ToString("X");
28
    var ww = ((byte)l[4]).ToString("X") + ((byte)l[5]).ToString("X") + ((byte)l[7]).ToString("X") + ((byte)l[6]).ToString("X");
29
    // ширина перепутана с высотой
30
    // вы вообще это тестировали?
31-
    // пробовали как работает ваша функция с изображением со стороной в 260 пикселов?
31+
    // пробовали как работает ваша функция с изображением со стороной в 260 пикселов, к примеру?
32
    return new Size(int.Parse(ww, System.Globalization.NumberStyles.HexNumber),
33
        int.Parse(hh, System.Globalization.NumberStyles.HexNumber));
34
}
35
36
// --- исправленный вариант ----
37
public Size GetSizeBMP(Stream inp) {
38
    var b = new byte[26];
39
    inp.Read(b, 0, 26);
40
41
    // Тут бы еще первые два байта проверить, чтобы удостоверится,
42
    // что читается именно BMP, а не что-то другое и выдать исключение, или вернуть пустой Size
43
    // ...
44
45
    return new Size(BitConverter.ToInt32(b, 18), BitConverter.ToInt32(b, 22));
46
47
    // хрен с этим BitConverter'ом, ну не знаете, что он есть, да и пофиг.
48
    // обыкновенные битовые операции, которые работают вообще мгновенно,
49
    // вместо вашего индусского "числа в строки -> строки в строку -> строка в число" не судьба применить?
50
    // return new Size(
51
    //     b[18] | b[19] << 8 | b[20] << 16 | b[21] << 24,
52
    //     b[22] | b[23] << 8 | b[24] << 16 | b[25] << 24
53
    // );
54
    // выглядит как обыкновенная арифметика, должно быть понятно абсолютно всем программистам.
55
}