7

問題: 256x128 px から 4096x2048 px までの複数のピクセル寸法で同じ画像を含む複数ページの TIFF 画像 (tiffutil で生成) があります。CALayerシステムがレイヤーのサイズに応じて画像の最適な表現を自動的に選択するように、この画像を で表示したいと考えています。現時点では、レイヤーはサイズに関係なく、常に 256x128 の画像表現を使用します。

これが私がすることです:私は画像をロードします

NSImage *image = [NSImage imageNamed:@"map-multipage.tiff"];

オブジェクトをログにimage記録すると、異なるピクセル サイズの複数の表現が含まれていることが確認されますが、すべての表現はポイント単位 (256x128) で同じサイズです。私の知る限り、これはAppleがマルチ解像度画像の構築を推奨する方法です。

NSLog(@"%@", image);

<NSImage 0x100623060 Name=map-multipage Size={256, 128} Reps=(
    "NSBitmapImageRep 0x10064d330 Size={256, 128} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=256x128 Alpha=NO Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x10014fdb0",
    "NSBitmapImageRep 0x10064e1b0 Size={256, 128} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=512x256 Alpha=NO Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x10014fdb0",
    ...
    "NSBitmapImageRep 0x100530bd0 Size={256, 128} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=4096x2048 Alpha=NO Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x10014fdb0"
)>

次に、インスタンスをレイヤーのプロパティNSImageに直接割り当てます。contents

self.layerView.layer.contents = image;

前述のように、結果として、レイヤーのサイズ (ポイントまたはピクセル) に関係なく、レイヤーは最初の表現 (256x128 ピクセル) を使用して画像を表示します。

同じ画像を に割り当てると、NSImageView期待どおりに動作します。画像ビューは、そのサイズに応じて最適な画像表現を透過的に選択します。私はそれが同じように機能することを期待していCALayerますが、明らかにそうではありません。この自動選択をサポートしていないことを誰かが確認できますか、CALayerそれとも何か間違っていますか?

(この質問は HiDPI/Retina グラフィックスとは直接関係がないことに注意してください。実際、レイヤーを HiDPI モードのディスプレイに移動すると、レンダリングが少しシャープになり、2 番目のビットマップ表現 (512x256 ピクセル) を使用するようになったことが示されます)これは、HiDPI ディスプレイでより高い解像度を選択する自動化が機能している一方で、最適なビットマップ表現の基本的な選択が失敗していることを示唆しています。)

4

1 に答える 1

2

-[CALayer setContents:]object-[contents size]が. _ contents_ NSImage次に、選択されたビットマップは、 が-[CALayer setContents:]再度呼び出されるまでそのまま使用されます。

于 2012-06-27T16:53:18.867 に答える