iOS:将png图像转换为1位bmp图像

时间:2013-02-27 11:12:57

标签: ios objective-c png bmp image-conversion

我的要求是将png文件转换为1位单色位图文件。我有一个UIImage对象,我希望将其表示为1位单色bmp。

1)有没有直接的方法来做到这一点?我准备从头开始这样做,但只有当没有现成的解决方案时才可以。我浏览了Core图形和Core图像框架,但找不到任何相关内容。或者是否有任何可用的开源项目?

2)如果我必须手动执行此操作,我对保存像素的位表示有一些疑问。我找到了bmp文件格式here

  1. 按照文件格式创建位图标头。我不确定 是否所有bmp版本(1位,8位等)都具有相同的标题格式。 找不到任何相关信息。
  2. 迭代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?
    }
    
  3. 将这些位附加到您已创建的bmp标头。
  4. 我知道如何遍历png图像中的每个像素,因此我可以获得该像素的单色表示。我也认为我可以做标题部分,即使我还没有完成它。但我不知道如何处理比特。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

  

有没有直接的方法来做到这一点?我准备从头开始这样做,但只有当没有现成的解决方案时才可以。

我无法告诉你是否有现成的解决方案在iOS中编写BMP,但我可以告诉你,BMP是少数几种从头开始编写相对容易的格式之一。

  

按照文件格式创建位图标头。我不确定所有bmp版本(1位,8位等)是否具有相同的标题格式。找不到任何相关信息。

维基百科的文章非常有用。所有BMP类型都具有基本相同的标头格式,bitdepth存储在偏移1Ch

  

迭代png图像的所有像素,得到红色,绿色,蓝色(RGB)的字节值。对这3个值进行一些计算,得到1位表示。例如......将这些位附加到您已创建的bmp标题。

听起来不错。不要忘记行可能需要一些padding

  

但我不知道如何处理比特

只需打包eight bits in one byte组。

相关问题