2011-11-17 8 views
1

現在NSimageクラスでサポートされていない特定のイメージフォーマットを描画して処理するアプリケーションを開発しています。この特定のフォーマットでは、画像は、データを記述するASCIIヘッダ(1次元寸法、画像サイズ、1ピクセルあたりのビット数など)の前に1Dバイナリテーブルの形式で格納されます。NSImageのカスタムイメージ表現の実装方法

Coco Drawing Guideで新しい画像表現を作成することができます。私はCocaとObjectiv-Cプログラミングの新機能です。このトピックでは、Coco Drawing Guideの説明が非常に短く、それほど役に立ちません。私は今、新しいイメージ表現を作成する方法に関するいくつかのサンプルコードを使って詳細を知りたいと考えています。また、私は特に、Cocoaアプリケーションが新しいイメージ表現を正しく解釈するためにinitWithDataメソッドとDrawメソッドを上書きする方法を理解することに興味があります。

わたしと分かち合うのは、その方法がより詳しく説明されているリンクですか?

答えて

1

あなたがしたいすべてがあなたの画像フォーマットを描き、特にもう一度あなたのアプリからそれをバック渡す気にしない場合は、NSImageRepをサブクラス忘れ、ちょうどビット深度でNSBitmapImageRepを作成するオフ最善だろうあなたのイメージと一致するディメンション。あなたはそれにそれを尋ねます-bitmapData

これは、あなたが直接アドレスすることができる生のバッファーを与え、あなたは文字通り画像の各ピクセルをバッファー内の適切な場所に一つずつコピーします。

あなたが本当にカスタムNSImageRepを希望した場合は、その後、あなたがする必要があるすべてはサブクラスNSImageRepで、その後、あなたのinitWithData:方法であなたはIVARの画像データを格納し、どのようにイメージの担当者に伝えるために、すべてのさまざまなメソッドを呼び出します-setBitsPerSample:,-setPixelsHigh:などのように構成する必要があります。NSImageRepクラスのドキュメントでは、イメージの初期化時にどのメソッドを呼び出す必要があるかについて説明しています。

-drawを実装するには、文字通り現在のコンテキストでピクセルを描画する必要があります。明らかにこれを行う方法は、描画するイメージのタイプによって異なります(たとえば、ベクターフォーマットの描画コードとビットマップの描画コードが大きく異なる場合など)。

ビットマップイメージを描画する方法の1つは、ピクセルをループして、ピクセルごとに1つのピクセルサイズの矩形でNSRectFill()を呼び出すことです。非常に高速ですが、特に効率的ではありません。

しかし、NSBitmapImageRepを作成し、ビットマップコンテキスト(-bitmapDataから返された)のピクセルを直接操作する方がよいでしょう。 NSBitmapImageRepから入手できるCGImageRepを描くことができます。 initWithData:メソッドでNSBitmapImageRepを作成する場合は、ピクセルを1回だけ割り当てる必要があります。

+0

この応答に感謝します。私はまだ、NSImageRepに興味があります。言い換えれば、私が書いているアプリケーションは描画だけでなく、データの処理と解析を行うためです。しかし今は、私は一歩一歩進んで、イメージの描画表現から始めます。いずれにしても、詳細を考えます。 –

関連する問題