如何在位图 int 数组 (rgb565) 之间转换 UIImage

Posted

技术标签:

【中文标题】如何在位图 int 数组 (rgb565) 之间转换 UIImage【英文标题】:How to convert UIImage to and from bitmap int array (rgb565) 【发布时间】:2013-07-20 19:45:17 【问题描述】:

我需要将我的 UIImage 传递给一个图像处理算法,该算法采用 rgb565 格式的位图的 int 数组。

稍后,它返回经过图像处理的 int 数组,我需要将其转换回 UIImage。

看看它的语法:

int* ImageProcessingAlgorithm(int bitmapArray[], int width, int height);

我搜索了很多地方,但似乎都没有 UIImage-to-int-array 以及反之亦然的转换。我发现最近的是this,但这处理的是字符数组——我尝试将它用于我的目的,但我一直在 UIKit 库函数中遇到各种访问错误和泄漏。也许我没有正确管理内存或 int-to-unsigned char-to-int 转换中的一些错误。

我可以处理这部分,但我仍然不确定它是否适合我的图像处理算法格式 (rgb565)。

我是图像处理的新手,图像处理算法对我来说是一个黑盒,所以我只需要可以传入和传出该算法的整数数组。

我可以肯定的是,该算法返回的数组元素数量与它作为输入的数量相同 - 即输入和输出数组代表相同数量的图像像素。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

正如我所想,CGBitmapContextGetData 函数返回一个指向数组的 void 指针,它可以转换为任何类型的数组指针。重要的是以后的处理。

这里是documentation。

可以使用此技术转换为 rgb565,取自here:

R5 = ( R8 * 249 + 1014 ) >> 11;
G6 = ( G8 * 253 +  505 ) >> 10;
B5 = ( B8 * 249 + 1014 ) >> 11;

【讨论】:

以上是关于如何在位图 int 数组 (rgb565) 之间转换 UIImage的主要内容,如果未能解决你的问题,请参考以下文章

16位BMP图的RGB444和RGB565如何区分

RGB888 转 RGB565

16位bmp文件中RGB555转RGB565算法

2021-08-16 灰度图rgb<>yuv

RGB565的转换

VerilogFPGA驱动Ov7670/Ov7725搭建视频通路(RGB565灰度图)