我的要求是将png文件转换为1位单色位图文件。我有一个UIImage对象,我希望将其表示为1位单色bmp。
1)有没有直接的方法来做到这一点?我准备从头开始这样做,但只有当没有现成的解决方案时才可以。我浏览了Core图形和Core图像框架,但找不到任何相关内容。或者是否有任何可用的开源项目?
2)如果我必须手动执行此操作,我对保存像素的位表示有一些疑问。我找到了bmp文件格式here。
迭代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?
}
我知道如何遍历png图像中的每个像素,因此我可以获得该像素的单色表示。我也认为我可以做标题部分,即使我还没有完成它。但我不知道如何处理比特。有什么帮助吗?
答案 0 :(得分:1)
有没有直接的方法来做到这一点?我准备从头开始这样做,但只有当没有现成的解决方案时才可以。
我无法告诉你是否有现成的解决方案在iOS中编写BMP,但我可以告诉你,BMP是少数几种从头开始编写相对容易的格式之一。
按照文件格式创建位图标头。我不确定所有bmp版本(1位,8位等)是否具有相同的标题格式。找不到任何相关信息。
维基百科的文章非常有用。所有BMP类型都具有基本相同的标头格式,bitdepth存储在偏移1Ch
迭代png图像的所有像素,得到红色,绿色,蓝色(RGB)的字节值。对这3个值进行一些计算,得到1位表示。例如......将这些位附加到您已创建的bmp标题。
听起来不错。不要忘记行可能需要一些padding
但我不知道如何处理比特
只需打包eight bits in one byte组。