2010-02-04 5 views
1

Je suis actuellement avoir quelques problèmes avec TTPhotoViewController: J'essaie d'afficher des photos (prises de mon appareil photo iPhone 3GS) et l'orientation des images affichées sont presque toujours erronées ...Problème d'orientation photo dans le TTPhotoViewController de Three20?

Je veux dire que, par exemple une photo prise en mode paysage sera parfois affichée correctement, parfois elle sera à l'envers, parfois elle sera tournée ...

J'ai aussi remarqué qu'une photo prise en mode portrait sera pivotée (et ainsi prendre plus de tout l'écran), mais en tournant l'iPhone va bien faire l'écran bien ...

Je pense que je deviens fou :) tout ce qu'il lp serait grandement apprécié, merci d'avance.

EDIT: Il semble que ce soit une question de taille. J'ai essayé de réduire la taille de ma photo et TTPhotoViewController ne gâche plus, puis j'essaie de la redimensionner à sa taille initiale et le problème se produit à nouveau. Je ne peux pas comprendre ce problème comme un "limite de mémoire", comme ma photo a été prise avec mon iPhone; En outre un UIImageView afficher bien ...

Si quelqu'un a une suggestion ...

Répondre

1

Vous définissez probablement la taille: attribut du PhotoSource à une valeur erronée.

Modifier: Malheureusement, je n'ai pas d'autre suggestion pour votre problème, mais j'ai un avertissement. Vous devriez certainement redimensionner votre image avant l'affichage, 1536x2048 est beaucoup trop grand pour l'iPhone à manipuler, et totalement inutile pour un écran 320x480. Sinon, vous êtes sûr d'avoir des plantages d'application en raison de la mémoire faible à l'avenir - si ce n'est pas maintenant.

+0

malheureusement je définir l'attribut de taille à la juste valeur, j'ai même entré manuellement ... Le problème n'est pas la taille, mais le fait que l'image soit affichée en paysage (rotation -PI/2) en effet de portrait, ce qui serait la bonne orientation photo. J'ai essayé de charger la photo dans un UIImage et avec UIImage, l'orientation est ok, je ne peux pas comprendre ... Auriez-vous une autre idée? mon code pour charger la photo ci-dessous: MockPhoto * m = [[MockPhoto alloc] initWithURL: @ "paquet: //img3.jpg" smallURL: @ "paquet: //img3.jpg" Taille: CGSizeMake (1536,0, 2048,0)]; – Taku

+0

Arg semble avoir raison ... J'ai essayé de réduire la taille de ma photo et TTPhotoViewController ne gâche plus, puis j'essaie de la redimensionner à sa taille initiale et le problème se produit à nouveau. Je ne peux pas comprendre ce problème comme un "limite de mémoire", comme ma photo a été prise avec mon iPhone; de plus un UIImageView l'affiche bien ... Si vous avez des suggestions je serais très heureux. – Taku

2

pour le redimensionnement paysage et portrait images avec une orientation correcte de la caméra rouleau et galerie-je utiliser cette fonction:

-(UIImage *)resizeImage:(UIImage *)image 
{ 
    CGImageRef imageRef = [image CGImage]; 
    CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef); 
    CGColorSpaceRef colorSpaceInfo = CGColorSpaceCreateDeviceRGB(); 

    if (alphaInfo == kCGImageAlphaNone) 
    { 
     alphaInfo = kCGImageAlphaNoneSkipLast; 
    } 

    int width, height; 

    width = 640; 
    height = 480; 

    CGContextRef bitmap; 

    if (image.imageOrientation == UIImageOrientationUp | image.imageOrientation == UIImageOrientationDown) 
    { 
     bitmap = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, alphaInfo); 
    } 
    else 
    { 
     bitmap = CGBitmapContextCreate(NULL, height, width, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, alphaInfo); 
    } 

    if (image.imageOrientation == UIImageOrientationLeft) 
    { 
     NSLog(@"image orientation left"); 
     CGContextRotateCTM (bitmap, radians(90)); 
     CGContextTranslateCTM (bitmap, 0, -height); 
    } 
    else if (image.imageOrientation == UIImageOrientationRight) 
    { 
     NSLog(@"image orientation right"); 
     CGContextRotateCTM (bitmap, radians(-90)); 
     CGContextTranslateCTM (bitmap, -width, 0); 
    } 
    else if (image.imageOrientation == UIImageOrientationUp) 
    { 
     NSLog(@"image orientation up");  
    } 
    else if (image.imageOrientation == UIImageOrientationDown) 
    { 
     NSLog(@"image orientation down"); 
     CGContextTranslateCTM (bitmap, width,height); 
     CGContextRotateCTM (bitmap, radians(-180.));  
    } 

    CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef); 
    CGImageRef ref = CGBitmapContextCreateImage(bitmap); 
    UIImage *result = [UIImage imageWithCGImage:ref]; 

    CGContextRelease(bitmap); 
    CGImageRelease(ref); 

    return result; 
} 
Questions connexes