来自光栅视频 RAM 的位图 1bpp 图像 - Windows 无法打开文件
Bitmap 1bpp image from raster video RAM - Windows can't open file
我正在使用 Intel 8080 CPU 模拟器,我需要检查视频 RAM 在 Space Invaders 游戏中是否正常。
我从 RAM 中获取了光栅数据并创建了位图 1bpp header 以检查视频输出情况。
Space Invaders 分辨率为 256x224 像素,因此视频 RAM 为 7168 字节。这是我的 header:
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)
Bitmap's header 是小端顺序。
当我尝试在 Windows 10 上打开文件时,出现有关文件不受支持的错误。
Windows10 可以打开 Bitmap v3 1bpp 图像吗?
1bpp 被视为索引颜色格式(与 4bpp 和 8bpp 相同)。所以颜色 table 是强制性的。
所以你的图片看起来也像这样:
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)
更新
光栅数据部分中的像素值被解释为颜色的索引 table。而颜色 table 是一个 RGBA 值数组。您可以在 header 中指定条目数,或者 - 如果它是 0 - 它假定为 2**n 其中 n 我是每个像素的位数。
在你的情况下,0 位将是索引 0,颜色将为 0xffffff00,即白色。 1 位将是索引 1,颜色将为 0x00000000,即白色。如果 0 位是黑色,则交换颜色条目。
我正在使用 Intel 8080 CPU 模拟器,我需要检查视频 RAM 在 Space Invaders 游戏中是否正常。
我从 RAM 中获取了光栅数据并创建了位图 1bpp header 以检查视频输出情况。
Space Invaders 分辨率为 256x224 像素,因此视频 RAM 为 7168 字节。这是我的 header:
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)
Bitmap's header 是小端顺序。
当我尝试在 Windows 10 上打开文件时,出现有关文件不受支持的错误。
Windows10 可以打开 Bitmap v3 1bpp 图像吗?
1bpp 被视为索引颜色格式(与 4bpp 和 8bpp 相同)。所以颜色 table 是强制性的。
所以你的图片看起来也像这样:
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)
更新
光栅数据部分中的像素值被解释为颜色的索引 table。而颜色 table 是一个 RGBA 值数组。您可以在 header 中指定条目数,或者 - 如果它是 0 - 它假定为 2**n 其中 n 我是每个像素的位数。
在你的情况下,0 位将是索引 0,颜色将为 0xffffff00,即白色。 1 位将是索引 1,颜色将为 0x00000000,即白色。如果 0 位是黑色,则交换颜色条目。