iphone上的像素操作



我正在制作一个应用程序,它必须以以下方式使用像素操作:围绕一个点(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++;
    }
}

我不知道你的意思是压缩像素,但我相信你现在可以找出你需要做什么…

相关内容

  • 没有找到相关文章

最新更新