2016-05-21 6 views
0

私のようなアプリケーションでは、NSImageクラスを使用して画像を読み込んでいます。すべての画像でNSImageが機能しない

if let image = NSImage(contentsOfURL: openPanel.URL!) { 
    ... 
} 

ほとんどの画像でうまくいきます。私はそれをCGImageに変換し、好きなように使います。しかし、いくつかの画像ではそれは単に不具合があり、私は理由を理解できません。たとえば、イメージサイズ2133x2133をロードすると、何も表示されず、image.sizeを印刷している場合は、非常に奇妙な(511.92, 511.92)が表示されます。

どのような種類の動作が発生する可能性がありますか?すべての画像はPNG形式です。同時に、私はサイズ(2048.0, 1536.0)とイメージをロードすることができ、すべて正常に動作します。

どのようにNSImageによる読み込みデバッグを開始する必要がありますか?

これは、画像の一例です:

http://rgho.st/6CVKMR2ZM/image.png

私はこのFUNCを使用しているからCGImageを作成するときに、私は何も見えません。ここで

var imageRect = CGRectMake(0, 0, newImage.size.width, newImage.size.height) 
    let imageRef = newImage.CGImageForProposedRect(&imageRect, context: nil, hints: nil) 
+0

これは、動作しない画像ファイルの例を教えていただいた場合に役立ちます。 –

+3

これは奇妙なことではないが、それは300ピクセル/インチの画像DPI設定を有する2133x2133画像である。 (2133/300 = 7.11インチ* 72ポット/インチ= 511.92ポンド);-)。画像の例が参考になります。イメージインスタンス全体をログに記録すると、通常、NSImageに含まれるイメージの種類や数など、豊富な情報が提供されます。 ( 'NSImage'は単なる1つ以上の' NSImageRep'のコンテナです) – NSGod

+1

@NSGod:ちょっとしたことで申し訳ありません: 'NSImage'は単に**ゼロ**以上の' NSImageRep'のコンテナです –

答えて

0

は私のソリューションです:実像を使用サイズではなく、AppleがDPIを使って計算したものではありません。

var w = 0 
    var h = 0 
    for r in newImage.representations { 
     w = max(w, r.pixelsWide) 
     h = max(h, r.pixelsHigh) 
    } 
    var imageRect = CGRectMake(0, 0, CGFloat(w), CGFloat(h)) 
    let imageRef = newImage.CGImageForProposedRect(&imageRect, context: nil, hints: nil) 
関連する問題