我的要求是将 png 文件转换为 1 位单色位图文件。我有一个 UIImage 对象,我想将其表示为 1 位单色 bmp。
1)有没有直接的方法来做到这一点?我准备从头开始做这件事,但前提是没有任何现成的解决方案可用。我浏览了 Core graphics 和 Core image framework,但找不到任何相关的东西。或者是否有任何可用的开源项目可以实现这一点?
2)如果我必须手动执行此操作,我对保存像素的位表示有些怀疑。我在这里找到了 bmp 文件格式。
- 按照文件格式创建位图标题。我不确定是否所有 bmp 版本(1 位、8 位等)都具有相同的标头格式。找不到任何相关信息。
遍历png图像的所有像素,得到红、绿、蓝(RGB)的字节值。对这 3 个值进行一些计算,以获得 1 位表示。例如像(伪代码)
for(each pixel){ average = (pixel.RValue + pixel.GValue + pixel.BValue)/3; if(average > 0x7f) //127 bit = 1; else bit = 0; //bit has monochrome representation for this pixel, but how to store it? }
- 将这些位附加到您已经创建的 bmp 标头中。
我知道如何遍历 png 图像中的每个像素,因此我可以获得该像素的单色表示。我也认为我可以做标题部分,即使我还没有做过。但我不知道如何处理位。有什么帮助吗?