12
votes

Comment obtenir [l'image de l'uIImageWithContentsOffile:] et des images haute résolution travaillant


0 commentaires

6 Réponses :


13
votes

OK, solution réelle trouvée par Michael ici: http://atasypixel.com/blog/ uIImage-résolution-Indépendance-et-iphone-4s-rétina-afficheur /

Il a compris que l'uIimage a la méthode "initwithcgimage" qui prend également un facteur d'échelle comme entrée (je suppose que la seule méthode où vous pouvez vous configurer le facteur d'échelle) P>

[UIImage initWithCGImage:scale:orientation:]


1 commentaires

Si vous prenez en charge IOS 4.1 ou plus tard, consultez la réponse de 'Bioffe'. Beaucoup plus simple.



5
votes

J'ai développé une solution de contournement abandonnée pour ce problème. Il utilise la méthode Swizzling pour remplacer le comportement de la méthode "imagewithContsentsOffile:" d'uiImage. Cela fonctionne bien sur les iPhones / iPods Pre / Post Retina. Pas sûr de l'iPad.

J'espère que cela est d'aide. xxx


2 commentaires

Bonjour Marco, comme décrit dans la question - les noms des fichiers ne sont pas un problème du tout, mais le facteur d'échelle de l'image elle-même.


Bonjour ICAN, mon code définit correctement le facteur d'échelle (testé dans Simulator avec OS 4.0.1 et 4.1). Le point est que, tandis que ImageWithContsentsOffle: ne trouve pas automatiquement la variante "@x", comme vous le dites, une fois que vous l'avez instructué d'obtenir le fichier "@x" directement (comme dans ma méthode Swizzled), il définit ensuite correctement le facteur d'échelle. Il suffit de laisser tomber mes deux catégories quelque part dans votre code où ils sont compilés et essayez d'utiliser imageWithContentsOffile: comme vous le feriez s'il n'était pas cassé



9
votes

imageWithContsentsOffile fonctionne correctement (en considérant @ 2x images avec une échelle correcte) commençant iOS 4.1 et à l'envers.


8 commentaires

Malgré la documentation dit, imageWithContentsOffile: ne fonctionne pas sur des chemins absolus. Testé sur iOS 5.1


Cela ne fonctionne pas sur le chemin absolu d'images dans le dossier de caches pour moi. Enquêtera plus loin, peut-être que c'était un mauvais test.


Ne fonctionne pas sur iOS 5.1 SIM pour la rétine iPad. Utilisation de [UIIMAGE ImageWithContentsOffile: [[[[[Nsbundle MainBundle] Pathforresource: @ "image.png" de type: nil]]


@Jarson je l'utilise presque de la même manière, mais différemment [UIImage ImageWithContentsOffile: [[[Nsbundle MainBundune] Pathforresource: @ "Image" de type: @ "png"]]


@bioffe j'ai essayé de séparer l'extension dans le spécificateur de type et il n'y avait pas de changement de comportement.


@Jarson Ma suggestion pour vous est de poster votre code. Cela fonctionne pour moi depuis iOS 4.1 pour moi.


+1 Je peux confirmer que @ 2x Chargement fait fonctionne pour moi à l'aide de l'imageWithContsentsOffile sur iOS5.1 et iOS6 à l'aide de simulateurs de rétine (iPhone et iPad). Si quelqu'un vérifie le simulateur, assurez-vous que vous exécutez la version de la rétine du simulateur!


Je suis d'accord avec @OCMULUS, ça marche. Ne vérifiez pas la taille de l'image, car cela est en points, pas en pixels.



3
votes

[UIIMAGE ImageWithContentsOffile:] code> ne charge pas @ 2x graphiques si vous spécifiez un chemin absolu.

Voici une solution: P>

- (UIImage *)loadRetinaImageIfAvailable:(NSString *)path {

    NSString *retinaPath = [[path stringByDeletingLastPathComponent] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@@2x.%@", [[path lastPathComponent] stringByDeletingPathExtension], [path pathExtension]]];

    if( [UIScreen mainScreen].scale == 2.0 && [[NSFileManager defaultManager] fileExistsAtPath:retinaPath] == YES) 
        return [[[UIImage alloc] initWithCGImage:[[UIImage imageWithData:[NSData dataWithContentsOfFile:retinaPath]] CGImage] scale:2.0 orientation:UIImageOrientationUp] autorelease];
    else
        return [UIImage imageWithContentsOfFile:path];
}


0 commentaires

11
votes

Nous venons de courir ici ici au travail. Voici mon travail autour qui semble tenir de l'eau: xxx


0 commentaires

6
votes

Améliorer la réponse de Lisa Rossellis pour maintenir les images de la rétine à la taille souhaitée (pas les augmenter):

NSString *imagePath = ...Path to your image
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfFile:imagePath] scale:[UIScreen mainScreen].scale];


0 commentaires