Iphone 是否可以制作内存占用较小的UIImage?

Iphone 是否可以制作内存占用较小的UIImage?,iphone,iphone-sdk-3.0,Iphone,Iphone Sdk 3.0,我有一个UIImage,里面充满了来自iPhone摄像头的图像 由于图像具有2048x1536像素,因此会消耗大量内存 我希望这个图像是24位,而不是32位,但我不确定。这是第一个问题。图像是来自iPhone摄像头的24位还是32位 第二个问题是:如果图像是32位的,如何将其设置为同一内存的24位 第三个问题是:在将此图像分配给变量以节省空间之前,是否可以在不改变其大小的情况下对其执行任何操作 请不要使用涉及OpenGL的解决方案 提前感谢。(这不是一个真正的答案,但更多的是一个观察) 这种大小

我有一个UIImage,里面充满了来自iPhone摄像头的图像

由于图像具有2048x1536像素,因此会消耗大量内存

  • 我希望这个图像是24位,而不是32位,但我不确定。这是第一个问题。图像是来自iPhone摄像头的24位还是32位
  • 第二个问题是:如果图像是32位的,如何将其设置为同一内存的24位
  • 第三个问题是:在将此图像分配给变量以节省空间之前,是否可以在不改变其大小的情况下对其执行任何操作 请不要使用涉及OpenGL的解决方案

    提前感谢。

    (这不是一个真正的答案,但更多的是一个观察)

    这种大小的图片的原始数据将消耗大约12MB的未压缩空间

    2048*1536=3145728像素

    每个像素需要1字节的红色数据、1字节的绿色数据、1字节的蓝色数据和1字节的透明度=4字节/像素

    3145728*4=12582912字节=12MB


    对于iPhone来说,这确实是一个很大的内存块,我怀疑你能做些什么来解决这个问题(除非一次只能从磁盘读取图像片段,但这取决于你的使用情况,这可能真的会耗尽电池).

    如果不将图片存储在内存中并创建第二个缓冲区来存储修改后的版本,您将无法完成很多工作。我相信第二个缓冲区可以包含更少的每种颜色的位,甚至跳过alpha值。如果你使用每种颜色4比特,你就可以比原版减少50%,这还不包括去掉alpha后的节省

    一组简单的调用将告诉您图片上的信息是什么,例如每种颜色的位数以及是否包含alpha:

    CGImageAlphaInfo CGImageGetAlphaInfo (
       CGImageRef image
    );
    
    返回值 CGImageAlphaInfo常量,指定(1)位图是否包含alpha通道,(2)alpha位位于图像数据中的位置,以及(3)alpha值是否预乘。有关可能的值,请参阅“常量”。如果图像参数引用图像掩码,则函数返回KCGIMAGEALPHONE

    size_t CGImageGetBitsPerComponent (
       CGImageRef image
    );
    
    返回值 指定位图图像(或图像掩码)的每个颜色分量在内存中使用的位数。可能的值为1、2、4或8。例如,对于16位RGB(a)颜色空间,函数将返回每个颜色分量4位的值

    size_t CGImageGetBitsPerPixel (
       CGImageRef image
    );
    
    返回值 指定位图图像(或图像掩码)的每个像素在内存中使用的位数


    这应该让您开始了解图像是由什么组成的。在可以丢弃原始图像之前,用更少的位重新创建图像需要更多的工作,并且暂时需要更多的内存。

    有没有办法从相机图像中删除alpha以节省内存?谁需要全屏不透明图像中的alpha?谢谢你的回答!还有一个问题。我正在检查从照相机传来的照片。他们没有阿尔法,但为什么他们是32 bpp????如何将它们转换为24 bpp?我认为它们是32 bpp,因为读取单词边界上的数据更快?问题是处理24bpp图片的速度是否值得节省25%的空间。