我正在制作一个应用程序,它必须以以下方式使用像素操作:围绕一个点(x,y),我必须在半径为R的圆中浓缩或扩展像素,但我想保持UIImage的矩形框架。我通过以下方式获得原始数据(我在网上找到的):
CGImageRef imageRef = image.CGImage;
NSUInteger width = CGImageGetWidth(imageRef);
NSUInteger height = CGImageGetHeight(imageRef);
CFDataRef dataref = CopyImagePixels(imageRef);
unsigned char *rawData = CFDataGetBytePtr(dataref);
我在rawData中有像素数据。
int byteIndex = 0;
for (int ii = 0 ; ii < width * height ; ++ii)
{
//now rawData[baseIndex] stands for red
//rawData[baseIndex + 1] stands for green
//rawData[baseIndex + 2] stands for blue
byteIndex += 4;
}
现在,我如何知道当前像素是否在原点(x,y)和半径为R的圆内?我如何压缩/扩展这些像素?
谢谢
使用毕达哥拉斯定理- a2 + b2 = c2
c2是简单的:
CGFloat maxDistance = R*R;
对于每个像素,给定它的位置(xp, yp) -你可以在你的循环中保持-获得到原点距离的平方,并与maxDistance:
进行比较int byteIndex = 0;
CGFloat xp = 0;
CGFloat yp = 0;
for (int ii = 0 ; ii < width * height ; ++ii)
{
CGFloat xDist = xp - x;
CGFloat yDist = yp - y;
CGFloat dist = sqrt((xDist * xDist + yDist * yDist)) // Squares will be positive for comparison below...
if (dist <= maxDistance) {
...
}
byteIndex += 4;
if (++xp > width) {
xp = 0;
yp++;
}
}
我不知道你的意思是压缩像素,但我相信你现在可以找出你需要做什么…