NSImages にロードしたい独自のバイナリ形式の画像ファイルがたくさんあります。この形式は単純なビットマップではなく、透明性とその他の追加情報が混在した一種の RLE 表現です。
これらの画像の 1 つを Cocoa アプリで表示するには、画像ファイルをバイトごとに解析し、そこからビットマップを「計算」して NSImage に入れる方法が必要です。
Objective-C/Cocoaでこれを行うための良いアプローチは何ですか?
NSImages にロードしたい独自のバイナリ形式の画像ファイルがたくさんあります。この形式は単純なビットマップではなく、透明性とその他の追加情報が混在した一種の RLE 表現です。
これらの画像の 1 つを Cocoa アプリで表示するには、画像ファイルをバイトごとに解析し、そこからビットマップを「計算」して NSImage に入れる方法が必要です。
Objective-C/Cocoaでこれを行うための良いアプローチは何ですか?
画像データを解釈するタスクは、画像の表現オブジェクトによって処理されます。独自の形式を使用するには、いくつかのオプションがあります。(a) カスタム表現クラスを作成する、(b)NSCustomImageRep
カスタム デリゲートで使用する、または (c) カスタム オブジェクトを使用して、画像をサポートされている形式に変換します。生のビットマップ。
カスタム表現クラスの作成を選択した場合は、新しいイメージ表現クラスの作成NSImageRep
で説明されているように、 のサブクラスを作成します。これには基本的に、クラスがそれ自体を登録し、画像データを描画できることが必要です。これに加えて、メソッドをオーバーライドしてイメージに関する情報を返すことができ、通常のメソッドを使用してイメージをインスタンス化できます。この方法は、最も手間がかかります。NSImage
を使用NSCustomImageRep
すると、カスタム実装を作成するよりも作業が少なくて済みます。デリゲート オブジェクトは、固定位置に画像を描画できる必要があるだけです。ただし、画像に関するその他の情報を返すことはできません。また、NSCustomImageRep
オブジェクトを手動で作成してからNSImage
.
イメージを別の形式に変換することも、カスタム表現を作成するよりも簡単です。NSImage
適切なサイズのブランクを作成し、そこに描画するのと同じくらい簡単です。変換メソッドを呼び出す必要があるため、画像の作成はさらに複雑です。これは、フォーマットを変更しているため、効率 (将来の描画時間とメモリ使用量の両方) に影響します。これは、良い場合も悪い場合もあります。また、画像オブジェクトとそのソースの間の関連付けも失われます。