Three20的TTPhotoViewController中的照片方向问题?

时间:2010-02-04 20:43:54

标签: iphone orientation three20 photo

我目前在使用TTPhotoViewController时遇到了一些问题:我尝试显示一些照片(从我的iPhone 3GS相机中拍摄),显示图片的方向几乎总是错误的......

我的意思是,例如以横向模式拍摄的照片有时会正确显示,有时会颠倒,有时会旋转......

我还注意到,以纵向模式拍摄的照片将会旋转(因此拍摄的照片将超过整个屏幕),但旋转iPhone会使其更适合屏幕......

我想我会发疯:)任何帮助都会非常感谢,谢谢你的提前。

编辑: 这似乎是一个大小问题。 我试图缩小我的图片并且TTPhotoViewController不再搞砸了,然后我尝试将其重新缩放到其初始大小并且问题再次发生。 我无法将这个问题理解为“内存限制”问题,因为我的照片是用我的iPhone拍摄的;而且UIImageView显示得很好......

如果有人有建议......

2 个答案:

答案 0 :(得分:2)

使用相机胶卷和图库以正确的方向调整横向和纵向图像的大小我使用此功能:

-(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;  
}

答案 1 :(得分:1)

您可能将photoSource的size:attribute设置为某个错误的值。

编辑:不幸的是我对你的问题没有其他建议,但我有一个警告。你绝对应该在显示之前缩放你的图像,1536x2048对于iphone来说太大了,对于320x480的屏幕来说完全没必要。否则,你肯定会因为内存不足而导致应用程序崩溃 - 如果不是现在的话。