3

このコードがartistImageを幅0、高さ0の画像に設定するのはなぜですか?

NSURL * ArtistsImageURL = [NSURL URLWithString:@ " http://userserve-ak.last.fm/serve/252/8581581.jpg "];
NSImage * ArtistsImage = [[NSImage alloc] initWithContentsOfURL:artistImageURL];

4

4 に答える 4

4

ケンが書いたように、DPIはこの画像でめちゃくちゃになっています。NSImageに実際の画像サイズを設定させる(DPIを無視する)場合は、http://borkware.com/quickies/one?topic=NSImageで説明されている方法を使用してください

NSBitmapImageRep *rep = [[image representations] objectAtIndex: 0];
NSSize size = NSMakeSize([rep pixelsWide], [rep pixelsHigh]);
[image setSize: size];
于 2010-06-19T21:14:41.947 に答える
1

NSImageは私にとってこれをうまくロードしますが、その特定の画像には破損したメタデータがあります。exifデータによる解像度は7.1999997999228071e-06dpiです。

NSImageは、ファイル内のDPI情報を尊重するため、画像を自然なサイズで描画しようとすると、全体で2520000070ピクセルになります。

于 2010-04-20T23:39:46.557 に答える
0

最後に確認したところ、NSImage's -initWithContentsOfURL:ファイルURLでのみ機能します。最初にURLを取得してから、-initWithData:

于 2010-02-03T06:12:53.180 に答える
0

.representationsにNSImageRep*が含まれていることが多かれ少なかれ保証されています(もちろん、常にNSBitmapImageRepであるとは限りません)。将来の拡張のために安全を期すために、以下のコードのようなものを書くことができます。また、複数の表現も考慮されます(一部の.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
于 2013-08-29T13:49:19.527 に答える