Macプロジェクトに2つのPNGがあります。通常および@2x。Xcodeは、これらを1つのTIFFに結合し、@ 2xはインデックス0にあり、@1xはインデックス1にあります。
現在の表示スケールのCGImageRefバージョン(Quartzで使用)として適切な画像を取得するための推奨されるアプローチは何ですか?
CGImageSourceを介して手動で画像を取得できます。
NSBundle *mainBundle = [NSBundle mainBundle];
NSURL *URL = [mainBundle URLForResource:@"Canvas-Bkgd-Tile" withExtension:@"tiff"];
CGImageSourceRef source = CGImageSourceCreateWithURL((__bridge CFURLRef)(URL), NULL);
_patternImage = CGImageSourceCreateImageAtIndex(source, 1, NULL); // index 1 is @1x, index 0 is @2x
CFRelease(source);
これも機能していることがわかりましたが、RetinaディスプレイにRetinaバージョンが返されるかどうかはわかりません。
NSImage *patternImage = [NSImage imageNamed:@"Canvas-Bkgd-Tile.tiff"];
_patternImage = [patternImage CGImageForProposedRect:NULL context:nil hints:nil];
CGImageRetain(_patternImage); // retain image, because NSImage goes away
この質問に対する許容できる答えは、組み合わせた多重解像度TIFFからCGImageを適切に取得する方法を提供するか、ここで2番目のアプローチが機能する理由を説明します。または、どのような変更が必要か。