iOS:将 png 图像转换为 1 位 bmp 图像
Posted
技术标签:
【中文标题】iOS:将 png 图像转换为 1 位 bmp 图像【英文标题】:iOS : converting png image to 1 bit bmp images 【发布时间】:2013-02-27 11:12:57 【问题描述】:我的要求是将 png 文件转换为 1 位单色位图文件。我有一个 UIImage 对象,我想将其表示为 1 位单色 bmp。
1) 有没有直接的方法可以做到这一点?我准备从头开始做这件事,但前提是没有任何现成的解决方案可用。我浏览了 Core graphics 和 Core image framework,但找不到任何相关的东西。或者是否有任何可用的开源项目可以实现这一点?
2) 如果我必须手动执行此操作,我对保存像素的位表示存在一些疑问。我找到了 bmp 文件格式here。
-
按照文件格式创建位图标题。我不确定
所有 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 图像中的每个像素,因此我可以获得该像素的单色表示。我也认为我可以做标题部分,即使我还没有做过。但我不知道如何处理位。有什么帮助吗?
【问题讨论】:
您可能希望使用亮度值进行转换。 RGB 亮度不相等。 Y = 0.2126R + 0.7152G + 0.0722B en.wikipedia.org/wiki/Relative_luminance 【参考方案1】:有没有直接的方法来做到这一点?我准备从头开始做这件事,但前提是没有任何现成的解决方案可用。
我无法告诉你是否有现成的解决方案可以在 ios 中编写 BMP,但我可以告诉你,BMP 是少数几种相对容易从头开始编写的格式之一。
按照文件格式创建位图标题。我不确定是否所有 bmp 版本(1 位、8 位等)都具有相同的标头格式。找不到任何相关信息。
***的文章内容丰富。所有BMP类型的header格式基本相同,bitdepth存储在offset1Ch
遍历png图像的所有像素,得到红、绿、蓝(RGB)的字节值。对这 3 个值进行一些计算,以获得 1 位表示。例如...将这些位附加到您已经创建的 bmp 标头中。
听起来不错。不要忘记行可能需要一些 padding
但我不知道如何处理比特
简单打包eight bits in one byte的组。
【讨论】:
以上是关于iOS:将 png 图像转换为 1 位 bmp 图像的主要内容,如果未能解决你的问题,请参考以下文章
ImageMagick:无法将24位bmp图像转换为8位bmp图像