自己编写的RLE8压缩的BMP文件不被Preview这样的读者识别

问题描述 投票:0回答:1

我正在尝试使用 RLE8 压缩写入 BMP 图像文件。我读/写的大多数文件都能被标准阅读器识别,但有些文件会失败。具有大空白区域的图像无法识别,除非它们非常小(<512x512). However, images with complex color patterns are recognized, even when very large.

这是有问题的,因为 RLE 压缩最适合简单的图像,而我感兴趣的图像主要是简单的线条图——正是那种失败的图像。据我所知,其他人生成的采用 RLE8 压缩的 BMP 文件具有与我的格式相同的标题、颜色表和 RLE 代码字符串。成功或失败似乎取决于图像中的颜色模式:简单的空白图像失败,而复杂的图像有效。

这些文件必须通过某种校验和或其他验证吗?我认为我的图像与其他被识别的图像生成的图像之间没有系统差异。

我测试了多种尺寸和长宽比的图像。标准阅读器无法识别超出小尺寸的空白图像。相同的代码对于自行生成的图像和许多标准测试图像都适用,只要它们不是太简单。我比较了其他人生成的图像的 RLE 代码,它们看起来与我自己的相同(经过必要的修改)。

其他信息:画图等 Microsoft 应用程序可以毫无问题地显示我的所有图像。所以,问题似乎出在苹果阅读器应用程序上。有谁知道这是否是一个已知问题,如果是,如何解决?

我还没有找到可以显示“无效”图像的Apple应用程序。我尝试过Preview、FreeForm、ColorSync Utility以及Word中的图像导入功能。所有这些都适用于较小的图像,但无法将较大的图像识别为有效的图形格式。

示例: 这是两个 RLE8 图像文件:

第一个被读者标记为无效。 第二个几乎相同,但读取和显示正确。 两个文件使用相同的 RLE 代码,但第一个文件适用于 1024x64 图像(64 行),第二个文件适用于 1024x32 图像(32 行)。除了行数和标题中相应的差异之外,文件是相同的。

BM                     BM
file_size              1846
reserved1              0
reserved2              0
offset_to_pixels       1078
info_header_size       40
xpix                   1024
ypix                   64
planes                 1
bits_per_pixel         8
compression            1
bytes_in_pixel_block   768
xpixelspermeter        0
ypixelspermeter        0
colors_used            256
colors_important       256

RLE 代码块(标记为无效):

Line  0: 255,111 255,111 255,111 255,111 4,111 0, 0
Line  1: 255,111 255,111 255,111 255,111 4,111 0, 0
...
Line 63: 255,111 255,111 255,111 255,111 4,111 0, 1

有效文件

BM                     BM
file_size              1462
reserved1              0
reserved2              0
offset_to_pixels       1078
info_header_size       40
xpix                   1024
ypix                   32
planes                 1
bits_per_pixel         8
compression            1
bytes_in_pixel_block   384
xpixelspermeter        0
ypixelspermeter        0
colors_used            256
colors_important       256

RLE 代码块(有效):

Line  0: 255,111 255,111 255,111 255,111 4,111 0, 0
Line  1: 255,111 255,111 255,111 255,111 4,111 0, 0
...
Line 31: 255,111 255,111 255,111 255,111 4,111 0, 1

总结: 两个文件的 RLE 行相同,只是第一个文件有 64 行,而第二个文件有 32 行。但是,第一个文件被标记为无效。这是否与苹果阅读器的某些限制或我忽略的其他内容有关?

bmp rle
1个回答
0
投票

回答我自己的问题,据我目前所知:所有 Apple 图像显示程序都无法识别 RLE8 压缩的 BMP 图像,对于大多数为单色背景且超过一定尺寸的简单线条图像。在文件夹窗口中,它们不显示缩略图。单击时,它们会给出错误消息。但这些相同的文件在 Windows 计算机上的 Windows 应用程序中打开没有问题,并且在 Google 云端硬盘中正确显示。此外,至少一些在 Mac 上运行的非 Apple 应用程序在所有细节上都能正确读取和显示图像。很明显,Apple 图像读取器/显示应用程序应用了一些非明显的有效性测试,某些有效的 BMP 图像未通过。尽管运行了很多案例,我还是无法弄清楚测试是什么。

© www.soinside.com 2019 - 2024. All rights reserved.