質問

なぜ、このコードは?0幅と0高さ画像にartistImage設定である

  

NSURL * artistImageURL = [NSURL URLWithString:@ "ます。http:// userserve -ak.last.fm/serve/252/8581581.jpg の "];
      NSImageでは* artistImage = [[NSImageではALLOC] initWithContentsOfURL:artistImageURL];

役に立ちましたか?

解決

NSImageでは、私のために、この罰金をロードしていますが、その特定のイメージが破損したメタデータを持っています。 EXIFデータに応じて、その解像度は7.1999997999228071e-06 DPIです。

NSImageではあなたはその自然なサイズで画像を描画しようとした場合ので、あなたは全体ます。

2520000070個のピクセル何かを得るでしょう、ファイル内のDPI情報を尊重します

他のヒント

ケンが書いたように、

は、DPIは、このイメージにめちゃくちゃされます。あなたが本当の画像サイズ(DPIを無視して)を設定するNSImageではを強制したい場合は、<のhref =「http://borkware.com/quickies/one?topic=NSImage」のrel =「nofollowをnoreferrer」で説明した方法を使用> http://borkware.com/quickies/one?topic=NSImageするます:

NSBitmapImageRep *rep = [[image representations] objectAtIndex: 0];
NSSize size = NSMakeSize([rep pixelsWide], [rep pixelsHigh]);
[image setSize: size];
最後私がチェックし、NSImage's-initWithContentsOfURL:は、ファイルのURLで動作します。あなたは最初のURLを取得する必要があり、その後、-initWithData:

を使用します

これは、多かれ少なかれ.representationsはNSImageRep *(もちろん必ずしもNSBitmapImageRep)が含まれていることが保証されています。将来の拡張のために安全のために1は、以下のようなコードを書くことができます。そして、それも考慮に(一部.icnsと.TIFFファイルのように)複数の表現をとります。

@implementation NSImage (Extension)

- (void) makePixelSized {
    NSSize max = NSZeroSize;
    for (NSObject* o in self.representations) {
        if ([o isKindOfClass: NSImageRep.class]) {
            NSImageRep* r = (NSImageRep*)o;
            if (r.pixelsWide != NSImageRepMatchesDevice && r.pixelsHigh != NSImageRepMatchesDevice) {
                max.width = MAX(max.width, r.pixelsWide);
                max.height = MAX(max.height, r.pixelsHigh);
            }
        }
    }
    if (max.width > 0 && max.height > 0) {
        self.size = max;
    }
}

@end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top