2012-03-15 10 views
4

私にはNSImageがあります。私はいくつかのxとyのピクセルについてNSColorを読んでみたいと思います。 XcodeはNSImagecolorAtX:y:メソッドがあると思われますが、これはNSImageのメソッドが存在しないというエラーを引き起こします。 NSBitmapImageRepを作成して同じメソッドを呼び出す例をいくつか見てきましたが、NSImageをNSBitmapImageRepに変換することができませんでした。 NSBitmapImageRepのピクセルは何らかの理由で異なります。ココア:NSImageのピクセルカラーを読み取る

これを行う簡単な方法が必要です。これは複雑ではありません。

+1

どのように「NSBitmapImageRepのピクセル」が異なっていますか?私は前にそのようにして、良い結果を得ました。 – user1118321

+0

下のRob Kenigerの答えをご覧ください。 NSImageのアンカーポイント(原点)は左上、NSBitmapImageRepは左下です。一方を他方に変換すると、画像の座標は垂直方向に反転します。 – mtmurdock

+0

[NSImageからピクセルと色を取得する]の複製が可能です。(http://stackoverflow.com/questions/1994082/get-pixels-and-colours-from-nsimage) – smokris

答えて

9

コードが表示されていないと、何が問題になるのかを知ることは難しいです。

NSBitmapImageRepに画像を描画するには、initWithData:メソッドを使用し、画像のTIFFRepresentationを渡します。 colorAtX:y方法は、使用しているため

NSBitmapImageRep* imageRep = [[NSBitmapImageRep alloc] initWithData:[yourImage TIFFRepresentation]]; 
NSSize imageSize = [yourImage size]; 
CGFloat y = imageSize.height - 100.0; 
NSColor* color = [imageRep colorAtX:100.0 y:y]; 
[imageRep release]; 

(注)y値の調整を行う必要があります。

その後、NSBitmapImageRepの方法ではないNSImageある方法colorAtX:y:を、使用してピクセル値を得ることができます座標系は画像の左上から始まり、NSImageの座標系は左下から始まります。

また、ピクセルが画面に表示されている場合は、NSReadPixel()関数を使用して、現在の座標系のピクセルの色を取得できます。

+0

これでこのように試していますが、何かがあるようですオフ。 NSBitmapImageRepの座標系がNSImageと異なるのですか?すべてが垂直に反転されているようです。 NSImageは左下から描画されているように見えます(デフォルトではビューのようです)、NSBitmapImageRepは左上から描画しています(イメージを反転しています)。私は実際に画面に描画していないので、私は見ることができません。 – mtmurdock

+1

あなたは正しいと思われ、座標は反転されます。私はその答えを説明するためのコードを追加しました。 –

+0

あなたのお手伝いをしていただきありがとうございます。私は画像を編集している間に別のロードブロックに突入し、変更されたNSBitmapImageRepから新しいNSImageインスタンスを作成しなければならないことがわかりました。そこで、私のコードは、NSImageからNSBitmapImageRepを作成し、ピクセルを読み込み、ピクセルを変更し、変更されたNSBitmapImageRepからNSImageを作成し、新しいNSImageを表示するという行に沿って終了しました。助けてくれてありがとう! – mtmurdock

1

ファンクションcolorAtXNSBitmapImageRepはデバイスの色空間を使用していないようですが、実際に表示される色の値とは多少異なる色の値になる可能性があります。このコードを使用して、現在のデバイスの色空間で正しい色を取得します。

[yourImage lockFocus]; // yourImage is just your NSImage variable 
NSColor *pixelColor = NSReadPixel(NSMakePoint(1, 1)); // Or another point 
[yourImage unlockFocus]; 
+0

もう少し情報を教えてください。 「正確に正しい色になるとは限らない」とはどういう意味ですか? – walteronassis

+0

@walteronassis:私の答えは少し変わった – Ely

関連する問題