2012-01-26 11 views
0

これは、画像処理に関する私の最初の譲渡です。 Iは、出力画像の各画素のインデックスは以下の行列として表されると仮定している:出力画像の各インデックス位置にiphoneの画像にピクセル単位で色を追加する方法は?

00 01 02 03 04 05 

10 11 12 13 14 15 

20 21 22 23 24 25 

私は上に描画するために異なる色を有します。たとえば、インデックス00では、そこに置くために使用可能な赤い色があり、他のインデックスと同様に配置されます。私の質問は、これらの色をインデックスに描画して出力イメージを作成する方法です。

更新

これは私が今持っているものです。

inputImgAvg //Image for processing 
CGContextRef context = UIGraphicsGetCurrentContext(); 

float yy = groutW/2;   // skip over grout on edge 
    float stride =(int) (tileW + groutW +0.5); 
     for(int y=0; y<tilesY; y++) {    //Number tile in Y direction 
      float xx = groutW/2 ;   // skip over grout on edge 
      for(int x=0; x<tilesX; x++) { 
       tileRGB = [inputImgAvg colorAtPixel:CGPointMake(x,y)]; 

       //Right here I'm checking tileRGB with list of available color 
       //Find out the closest color 
       //Now i'm just checking with greenColor 

       // best matching tile is found in idx position in vector; 
       // scale and copy it into proper location in the output 
       CGContextSetFillColor(context, CGColorGetComponents([[UIColor greenColor] CGColor])); 

しかし、私はこのエラーを得ました。私は何が間違っているのか指摘できますか?

<Error>: CGContextSetFillColor: invalid context 0x0 
<Error>: CGContextFillRects: invalid context 0x0 
+0

-1があるのはなぜ? – user1139699

+0

あなたが実際にあなたの課題を試み、あなたが持っている特定の問題について質問をするならば、Stack Overflowから最良の反応を得るでしょう。 – theTRON

+0

この質問はあなたが探しているかもしれないと思います: http://stackoverflow.com/questions/448125/how-to-get-pixel-data-from-a-uimage-cocoa-touchoror -cgimage-core-graphics –

答えて

2

このスレッドは質問に答える:

http://www.iphonedevsdk.com/forum/iphone-sdk-development/34247-cgimage-pixel-array.html

を使用すると、画像のためのデータを提供することができますCGBitmapContextCreateを、使用してCGContextを作成します。その後、ポインタを使用してピクセルをデータに書き込んで、バイトを自分で設定することができます。

完了したら、UIImageオブジェクトにコンテキストデータを取得するために、UIGraphicsGetImageFromCurrentContext()または同等の関数を使用します。

これはすべて低レベルに見えますが、CGContextを作成して1x1の長方形を描くだけです。それは驚くほど速くはありませんが、あなたがCGの機能はすべて、純粋なCであるため、思うほど遅くはありませんし、任意の冗長性は、コンパイラによって最適化されます:

//create drawing context 
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), NO, 0.0f); 
CGContextRef context = UIGraphicsGetCurrentContext(); 

//draw pixels 
for (int x = 0; x < width; x++) 
{ 
    for (int y = 0; y < height; y++) 
    { 
     CGContextSetFillColor(... your color here ...); 
     CGContextFillRect(context, CGRectMake(x, y, 1.0f, 1.0f)); 
    } 
} 

//capture resultant image 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+0

あなたの答えをありがとう。それは私をたくさん助けました。しかし、私は本当に "あなたはポインタを使ってピクセルをデータに書き込むことができます"という意味を理解していません。私はCGDataProviderCopyDataを使用してソースイメージのデータを取得しました。私はUInt8にデータを変換しました。今私はポインタを使ってデータに描画する必要がある色をどのように渡すことができますか? – user1139699

+0

CGDataProviderCopyDataの使用はおそらく画像の実際のデータではなく、そのコピーで作業する必要があるため機能しません。各ピクセルは、4つのUInt8、赤、緑、青、アルファで構成されています。それが色の作り方です。画像データは4バイト以上のものなので、バイトを設定して結果を確認してみてください。いくつか余分なスペースがあるので、色の各行の最後に注意しなければならない場合があります。 –

+0

アドバイスありがとうございます – user1139699

関連する問題