iOS保存BMP文件时原图640x480变为640x-480的原因是什么
问题原因
这是BMP格式本身的规范特性,并非文件损坏:
- BMP文件头的
biHeight字段(存储图像高度)的正负值代表不同的像素扫描顺序:- 正值:像素行采用从下到上的顺序存储,从图像底部开始逐行往上写入,是Windows平台BMP的默认格式
- 负值:像素行采用从上到下的顺序存储,从图像顶部开始逐行往下写入
- 你调用的
CGImageDestinationAddImage接口在生成BMP时,Core Graphics框架默认会采用从上到下的扫描顺序写入像素,因此会自动把高度字段设为-480,和原始480的高度是对应的,只是存储顺序不同。
影响说明
负高度的BMP属于标准兼容格式,所有主流图像查看、编辑工具都可以正常识别渲染,不会出现显示异常,不需要额外处理也可以正常使用。
生成正高度BMP的方案
如果你的业务场景要求必须生成高度为正的标准Windows格式BMP,可以在写入图像前先将CGImage做上下翻转处理,再传入CGImageDestinationAddImage接口即可,生成的文件高度就会显示为正的480。
内容的提问来源于stack exchange,提问作者leory_lyz
相关产品推荐
相关产品推荐

