2011-01-26 14 views
0

アイデア?座標点に基づいてピクセルデータを取得する。howtoはCGPoint(x、y)に基づいてピクセルデータを取得しますか?

+0

どうすればいいですか?私はそれらのことにあまり注意を払っていません。 – lilzz

+0

@ user482473:upvoteするには、upv​​oteしたい答えの左にある投票数の上にある上矢印をクリックしてください。受け入れるには、白いダニの記号をクリックしてください - 緑色になり、答えが受け入れられたとマークされます。 – pt2ph8

答えて

3

私はそれをテストしていませんが、動作するはずです。 imageUIImageです。 forは画像をループし、各ピクセルのRGBA値を取得します。ループを削除して、xxyyを座標に置き換えれば、1つのピクセルが得られます。

CGImageRef imageRef = [image CGImage]; 
NSUInteger width = CGImageGetWidth(imageRef); 
NSUInteger height = CGImageGetHeight(imageRef); 
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
unsigned char *rawData = malloc(height * width * 4); 
NSUInteger bytesPerPixel = 4; 
NSUInteger bytesPerRow = bytesPerPixel * width; 
NSUInteger bitsPerComponent = 8; 
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 
CGColorSpaceRelease(colorSpace); 

CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef); 
CGContextRelease(context); 

// this loops through all the pixels 
for(int yy = 0; yy<height; yy++) { 
    for(int xx = 0; xx<width; xx++) { 
     int byteIndex = (bytesPerRow * yy) + xx * bytesPerPixel; 

     short r = rawData[byteIndex]; 
     short g = rawData[byteIndex + 1]; 
     short b = rawData[byteIndex + 2]; 
     short a = rawData[byteIndex + 3]; 
    } 
} 

free(rawData); 
+0

こんにちはBrainfeeder、あなたは画像が画面全体を占めていると仮定していますか?画像が小さい画像の場合はどうなりますか?個々のピクセルにアクセスするためのインデックスは、実際のフル座標に変換されません。たとえば、インデックスxx = 0、yy = 0では、実際の座標で小さな画像が始まります。たとえば(220,145)としましょう。画面に複数の小さな画像がある場合はどうなりますか? – lilzz

+0

例えば、もし点が(220、160)であれば、それは小さな画像の真ん中のどこかで、画像の中でxxとyyをどうやって見つけますか? (220,160)を(xx、yy)に変換するか? – lilzz

+0

ピクセル(220,160)を探しているなら、 'xx = 220'と' yy = 160'です。注意して、2つの 'for'ループを削除する必要があります。 – pt2ph8

関連する問題