美文网首页
CIImage、CGImage之个人浅见

CIImage、CGImage之个人浅见

作者: 菜鸟成长史 | 来源:发表于2020-04-28 13:40 被阅读0次

CIImage,接触不多,网上说是保存了图像所有数据的一个类,但是它本身并没有渲染成图像;

CGImage,主要用在对像素操作的场景,像素中一般保存rgba信息;

首先,开发者可利用CGBitMapContextCreate()函数设置渲染上下文,再利用CGContextDrawImage()函数画图,即可copy出指定设置的新图像,然后利用传入CGBitMapContextCreate()函数的第一个参数(指向新图像缓冲区的首地址),可以获取图像内存地址data,因为图像缓冲区的内存是连续的,所以再通过指针操作(移动),可以遍历图像所有像素取出每个像素点的rgb数据;

问题:比如一张是rgba四通道,32位(一个像素占4字节),width:100px,height:100px处的图片,我们要取x: 10, y:16 处的像素点颜色数据,如何做到呢?

答案1:利用指针移动即:data + y * width * 4 + x * 4 ,即移动到了该像素点开始的内存地址,那我们怎么取对应内存地址的数据呢?可以通过*()获取,即*(data + y * width * 4 + x * 4)即该像素点r通道的数据;

答案2:如下图类似数组取值;

for(size_ti =0; i < height; i++)

    {

for(size_tj =0; j < width; j++)

        {

size_t pixelIndex = i * width *4+ j *4;

unsignedcharred = data[pixelIndex];

unsignedchargreen = data[pixelIndex +1];

unsignedcharblue = data[pixelIndex +2];

            unsignedcharred2 = data2[pixelIndex];

        unsignedchargreen2 = data2[pixelIndex +1];

unsignedcharblue2 = data2[pixelIndex +2];

            }

        }

    }

相关文章

网友评论

      本文标题:CIImage、CGImage之个人浅见

      本文链接:https://www.haomeiwen.com/subject/hpevwhtx.html