4

NSImages複数の内容に設定しておりCALayersます。これらの画像にはすべて、1x、2x、5x、および 10x の4 つの担当者がいます。ビューが変更されたときに contentsScale を設定すると、これらの画像の 3 つは一見うまくスケーリングされますが、そのうちの 1 つは、何をしてもbackingScaleFactor常に1x表現を選択するようです。コンソールにログインした画像は次のとおりです。

<NSImage 0x1019cea60 Size={20, 24} Reps=(
    "NSBitmapImageRep 0x101a0db60 Size={20, 24} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=20x24 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a0c8e0",
    "NSBitmapImageRep 0x101a0ec90 Size={20, 24} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=40x48 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a0dbd0",
    "NSBitmapImageRep 0x101a0fdb0 Size={20, 24} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=100x120 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a0ed00",
    "NSBitmapImageRep 0x101a10ef0 Size={20, 24} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=200x240 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a0fcb0"
)>
<NSImage 0x1001faa90 Size={28, 320} Reps=(
    "NSBitmapImageRep 0x101a06240 Size={28, 320} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=28x320 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a05230",
    "NSBitmapImageRep 0x101a07370 Size={28, 320} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=56x640 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a062d0",
    "NSBitmapImageRep 0x101a08490 Size={28, 320} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=140x1600 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a07400",
    "NSBitmapImageRep 0x101a095c0 Size={28, 320} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=280x3200 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a08390"
)>
<NSImage 0x10052e790 Size={28, 40} Reps=(
    "NSBitmapImageRep 0x101a01d10 Size={28, 40} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=28x40 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a005d0",
    "NSBitmapImageRep 0x101a02de0 Size={28, 40} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=56x80 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a01da0",
    "NSBitmapImageRep 0x101a03f00 Size={28, 40} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=140x200 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a02fa0",
    "NSBitmapImageRep 0x101a05080 Size={28, 40} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=280x400 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a040c0"
)>
<NSImage 0x101bbfc40 Size={28, 600} Reps=(
    "NSBitmapImageRep 0x101a0a760 Size={28, 600} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=28x600 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a094f0",
    "NSBitmapImageRep 0x101a0b890 Size={28, 600} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=56x1200 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a0a7f0",
    "NSBitmapImageRep 0x101a0ba60 Size={28, 600} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=140x3000 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a0ab10",
    "NSBitmapImageRep 0x101a0c9b0 Size={28, 600} ColorSpace=(not yet loaded) BPS=8 BPP=(not yet loaded) Pixels=280x6000 Alpha=YES Planar=NO Format=(not yet loaded) CurrentBacking=nil (faulting) CGImageSource=0x101a0b920"
)>

3 つ目 (28 x 40) は常に 1x で描画されます。倍率を設定するために使用するコードは次のとおりです。

- (void)viewDidChangeBackingProperties {
    [super viewDidChangeBackingProperties];
    self.layer.contentsScale       = self.window.backingScaleFactor;
    self.otherLayer.contentsScale  = self.window.backingScaleFactor;

    self.otherLayer.contents = self.image;
}

この質問CALayerでは、 が描画時に最適な表現を選択することが確立されており、NSImage再度設定する必要があるため、レイヤーの内容を再度画像に設定しました。

すべての画像で新しい-recommendedLayerContentsScale:メソッドを実行しましたが、正しくスケーリングされていないものを除いて、2.0 を指定するとすべて 2.0 が返されました。

編集:壊れた画像をファイルに書き込んでから、別のアプリで新しいものNSImageを開いinitWithContentsOfFileて、それをに入れましたがNSImageView、問題は解決しません! ただし、機能していた画像の1つで機能します。明らかに、Apple の画像選択コードに何か問題があります。

4

0 に答える 0