Question

Pourquoi ce réglage du code artistImage à une image avec 0 largeur et hauteur 0?

  

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

Était-ce utile?

La solution

NSImage ne charge cette fin pour moi, mais cette image particulière a des métadonnées corrompues. Sa résolution selon les données exif est 7.1999997999228071e-06 dpi.

NSImage respecte l'info DPI dans le fichier, donc si vous essayez de dessiner l'image à sa taille naturelle, vous aurez quelque chose 2520000070 pixels à travers.

Autres conseils

Comme l'a écrit Ken, le DPI est foiré dans cette image. Si vous voulez forcer NSImage à définir la taille réelle de l'image (en ignorant le DPI), utilisez la méthode décrite à http://borkware.com/quickies/one?topic=NSImage :

NSBitmapImageRep *rep = [[image representations] objectAtIndex: 0];
NSSize size = NSMakeSize([rep pixelsWide], [rep pixelsHigh]);
[image setSize: size];

Aux dernières nouvelles, NSImage's -initWithContentsOfURL: fonctionne uniquement avec les URL de fichiers. Vous aurez besoin de récupérer l'URL d'abord, puis utilisez -initWithData:

Il est plus ou moins garanti que .representations contient NSImageRep * (bien sûr pas toujours NSBitmapImageRep). Pour être sûr d'un côté pour les extensions futures, on peut écrire quelque chose comme le code ci-dessous. Et il prend également en compte la représentation multiple (comme dans certains .icns et .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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top