Хабы: Блог компании RUVDS.com, C++, *nix, Обработка изображений, Операционные системы
Пару лет назад мне выпала возможность расследовать в SerenityOS интересный баг, связанный с декодированием изображений JPG, которые по какой-то причине при просмотре выглядели так, как вы видите выше.
Странно, не так ли? Похоже, будто просто перепутали RGB и BGR. При этом внесение в
JPGLoader.cpp
следующего изменения:
- const Color color { (u8)block.y[pixel_index], (u8)block.cb[pixel_index], (u8)block.cr[pixel_index] };
+ const Color color { (u8)block.cr[pixel_index], (u8)block.cb[pixel_index], (u8)block.y[pixel_index] };
context.bitmap->set_pixel(x, y, color);
приводит к корректному показу картинки. Вроде бы можно считать дело закрытым!
…Но нет. Возникает вопрос, почему вообще произошёл этот сбой?
Читать дальше →