Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static Size GetSizeBMP(Stream inp) {
- var b = new byte[24];
- inp.Read(b, 0, 24); // ошибка, нужно читать 26 байт,
- // размер изображения хранится в последних восьми байтах из прочитанных
- List<int> l = new List<int>(); // зачем нужен этот List?
- // почему его элементы int?
- // чтобы потом кастовать обратно в byte?
- // в лучших традициях китайского быдлокодинга. цикл не судьба применить?
- l.Add(b[16]);
- l.Add(b[17]);
- l.Add(b[18]);
- l.Add(b[19]);
- l.Add(b[20]);
- l.Add(b[21]);
- l.Add(b[22]);
- l.Add(b[23]);
- // или вообще без циклов:
- // var l = b.Skip(16).Select(x => (int)x).ToList(); // вот вам и лямбда, раз так нужен интовый список
- // но ведь интовый список не нужен!
- // var l = b.Skip(16).ToArray();
- // но цикла здесь таки будет достаточно.
- // адский ад в лучших традициях индусского быдлокодинга: числа в строки -> строки в строку -> строка в число.
- // потом еще удивляются: почему это программы тормозят.
- var hh = ((byte)l[0]).ToString("X") + ((byte)l[1]).ToString("X") + ((byte)l[3]).ToString("X") + ((byte)l[2]).ToString("X");
- var ww = ((byte)l[4]).ToString("X") + ((byte)l[5]).ToString("X") + ((byte)l[7]).ToString("X") + ((byte)l[6]).ToString("X");
- // ширина перепутана с высотой
- // вы вообще это тестировали?
- // пробовали как работает ваша функция с изображением со стороной в 260 пикселов?
- return new Size(int.Parse(ww, System.Globalization.NumberStyles.HexNumber),
- int.Parse(hh, System.Globalization.NumberStyles.HexNumber));
- }
- // --- исправленный вариант ----
- public Size GetSizeBMP(Stream inp) {
- var b = new byte[26];
- inp.Read(b, 0, 26);
- // Тут бы еще первые два байта проверить, чтобы удостоверится,
- // что читается именно BMP, а не что-то другое и выдать исключение, или вернуть пустой Size
- // ...
- return new Size(BitConverter.ToInt32(b, 18), BitConverter.ToInt32(b, 22));
- // хрен с этим BitConverter'ом, ну не знаете, что он есть, да и пофиг.
- // обыкновенные битовые операции, которые работают вообще мгновенно,
- // вместо вашего индусского "числа в строки -> строки в строку -> строка в число" не судьба применить?
- // return new Size(
- // b[18] | b[19] << 8 | b[20] << 16 | b[21] << 24,
- // b[22] | b[23] << 8 | b[24] << 16 | b[25] << 24
- // );
- // выглядит как обыкновенная арифметика, должно быть понятно абсолютно всем программистам.
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement