Растровое изображение 1bpp из RAM растрового видео - Windows не может открыть файл
Я работаю над эмулятором процессора Intel 8080, и мне нужно проверить, нормально ли работает видеопамять в игре Space Invaders.
Я получил растровые данные из ОЗУ и создал растровый заголовок 1bpp, чтобы проверить, как выглядит видео.
Разрешение Space Invaders составляет 256x224 пикселей, поэтому объем оперативной памяти составляет 7168 байт. Это мой заголовок:
FILEHEADER (14 bytes)
42 4D
36 1C 00 00
00 00 00 00
36 00 00 00
INFOHEADER (40 bytes)
28 00 00 00
00 01 00 00
E0 00 00 00
01 00
01 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
RASTER DATA (7168 bytes)
1st ... 31th (bytes for line 1)
32th ... 63th (bytes for line 2)
... (bytes for line n)
... (bytes for line 224)
Заголовок растрового изображения имеет порядок байтов.
Когда я пытаюсь открыть файл в Windows 10, выдает ошибку о неподдерживаемом файле.
Может ли Windows 10 открыть изображение Bitmap v3 1bpp?
1 ответ
1bpp рассматривается как индексированный цветовой формат (такой же, как для 4bpp и 8bpp). Поэтому таблица цветов обязательна.
Так что ваше изображение тоже выглядит примерно так:
FILEHEADER (14 bytes)
42 4D
3E 1C 00 00 <-- updated
00 00 00 00
3E 00 00 00 <-- updated
INFOHEADER (40 bytes)
28 00 00 00
00 01 00 00
E0 00 00 00
01 00
01 00
00 00 00 00
00 00 00 00 <-- is this correct?
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
COLOR TABLE (8 bytes) <-- added
FF FF FF 00
00 00 00 00
RASTER DATA (7168 bytes)
1st ... 31th (bytes for line 1)
32th ... 63th (bytes for line 2)
... (bytes for line n)
... (bytes for line 224)
Обновить
Значения пикселей в разделе растровых данных интерпретируются как индексы в таблице цветов. А таблица цветов - это массив значений RGBA. Вы можете указать количество записей в заголовке или - если оно равно 0 - предполагается, что оно равно 2**n, где ni - количество бит на пиксель.
В вашем случае бит 0 будет индексом 0, а цвет будет 0xffffff00, т.е. белым. 1 бит будет индексом 1, а цвет будет 0x00000000, т.е. белым. Если бит 0 черный, поменяйте местами записи цвета.