iphone上的像素操作

iphone上的像素操作,iphone,pixel-manipulation,Iphone,Pixel Manipulation,我正在开发一个应用程序,它必须以以下方式使用像素操作:围绕一个点(x,y),我必须压缩或扩展半径为R的圆中的像素,但我希望保持UIImage的矩形帧。我通过以下方式获得原始数据(我在网上找到): 所以,我在rawData中有像素数据 int byteIndex = 0; for (int ii = 0 ; ii < width * height ; ++ii) { //now rawData[baseIndex] stands for red //rawData[baseI

我正在开发一个应用程序,它必须以以下方式使用像素操作:围绕一个点(x,y),我必须压缩或扩展半径为R的圆中的像素,但我希望保持UIImage的矩形帧。我通过以下方式获得原始数据(我在网上找到):

所以,我在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;
}
int byteIndex=0;
对于(int ii=0;ii<宽度*高度;++ii)
{
//现在rawData[baseIndex]代表红色
//rawData[baseIndex+1]代表绿色
//rawData[baseIndex+2]代表蓝色
byteIndex+=4;
}
现在,我如何知道当前像素是否在原点(x,y)和半径R的圆内? 如何压缩/扩展这些像素


谢谢使用毕达哥拉斯定理-a2+b2=c2

c2很简单:

对于每个像素,给定其位置(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++;
    }
}
int byteIndex=0;
CGXP=0;
cgyp=0;
对于(int ii=0;ii<宽度*高度;++ii)
{
CGFloat xDist=xp-x;
cgydist=yp-y;
CGFloat dist=sqrt((xDist*xDist+yDist*yDist))//在下面的比较中,正方形将为正值。。。
if(距离宽度){
xp=0;
yp++;
}
}

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

这似乎正是我所需要的,我只是不知道如何维护(xp,yp)。通过压缩像素,我的意思是我必须缩小给定圆下的一点图像。扩展与压缩相反我已经更新了我的答案来展示如何在你的循环中维护xp,yp。好的,谢谢。你能给我一个如何扩展或压缩像素>?在我看来,扩展/压缩它要复杂得多,而实现实际上取决于最终效果应该是什么样子。也许您可以从原始图像创建一个更大/更小的图像,并将该版本的像素复制到新图像上,它们位于您的圆圈内。通过图形遮罩进行此操作可能是最快的,但这肯定超出了此处快速回答的范围。。。。
CGFloat maxDistance = R*R;
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++;
    }
}