0

私は次のようにピクセル操作を使用する必要があるアプリケーションに取り組んでいます:点(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の円内にあるかどうかをどのように知ることができますか?そして、これらのピクセルをどのように凝縮/拡張しますか?

ありがとう

4

1 に答える 1

1

ピタゴラスの定理を使う - a 2 + b 2 = c 2

c 2は簡単です:

CGFloat maxDistance = R*R;

ピクセルごとに、その位置 (xp、yp) を指定すると (ループで維持できます)、原点からの距離の 2 乗を取得し、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++;
    }
}

ピクセルを凝縮するという意味はわかりませんが、今何をする必要があるかを理解できると確信しています...

于 2011-11-28T07:49:59.357 に答える