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];
}
}
}
网友评论