2010-12-05 19 views
0

iPhoneで画像のピクセルを読み取ったり編集したりする方法が不思議です。色付きの点の配列を使う方がいいですか?私がするCGPointは絵の上に「茶色」スポットと交差する場合..のようなものをやりたいiPhoneで画像のピクセルを読み取って編集する

は、白の半径内のすべての茶色のピクセルの色を設定します。来るべき質問がありますが、これが始まりです。

乾杯

答えて

1

画像データが正確とあなたに利用可能である - ピクセルの二次元アレイは、各画素は32ビットの整数で表されます。各色成分(赤、緑、青、アルファ)には8ビットの値があります。 32ビット整数内のこれらの8ビット幅の値の順序は、画像データのフォーマットによって異なる。これについてのリンゴの文書は本当に良いです。 CGDataProviderCopyDataを使用してUIImageの実際のデータストレージへのポインタを与える魅力的なAppleのものがありますが、実際には、内部ストレージのフォーマットがイメージごとに大きく異なる可能性があるため、頭痛になる可能性があります。実際には、画像処理を行うほとんどの人は、このアプローチを使用しているようです。

CGImageRef image = [UIImage CGImage]; 
    NSUInteger width = CGImageGetWidth(image); 
    NSUInteger height = CGImageGetHeight(image); 
    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)); 
    CGContextRelease(context); 

    // rawData contains image data in the RGBA8888 format. 

    // for any pixel at coordinate x,y -- the value is 
    // 

    int pixelIndex = (bytesPerRow * y) + x * bytesPerPixel; 
    unsigned char red = rawData[pixelIndex]; 
    green = rawData[pixelIndex + 1]; 
    blue = rawData[pixelIndex + 2]; 
    alpha = rawData[pixelIndex + 3]; 
+0

偉大な答え!この画像をリアルタイムで保存/読み込みするのはどれぐらい効率的ですか?私が変更を加えるたびに私はフラグを立てると仮定します。 – quantumpotato

+1

かなり効率的です。あなたは常に変化していても30fpsに近づくことができます... –

+0

ありがとう!これを試すことを楽しみにしています。 – quantumpotato

関連する問題