2010-02-04 3 views
1

я в настоящее время возникли некоторые проблемы с TTPhotoViewController: Я пытаюсь показать несколько фотографий (из моего iPhone 3GS камеры), и ориентация отображаемых изображений почти всегда ошибочны ...Проблема с ориентацией фотографий в TTRhotoViewController от Three20?

Я имею в виду, что, например, фото, сделанное в ландшафтном режиме, будет иногда отображаться правильно, иногда оно будет перевернуто вверх, иногда оно будет повернуто ...

Я также заметил, что снимок, сделанный в портретном режиме, будет повернут (и так будет возьмите больше, чем весь экран), но поворот iPhone заставит его хорошо подогнать экран ...

Я думаю, что сойду с ума :) любой он lp будет очень благодарен, спасибо заранее.

EDIT: Кажется, это вопрос размера. Я попытался уменьшить масштаб изображения, и TTPhotoViewController больше не испортится, а затем я попытаюсь перемасштабировать его до первоначального размера, и проблема снова возникает. Я не могу понять эту проблему как «ограничение памяти», поскольку моя фотография была сделана с моим iPhone; кроме того UIImageView показать это хорошо ...

Если кто-нибудь есть предложение ...

ответ

1

Вы, наверное, установить размер: атрибут photoSource в какой-то неправильное значение.

Редактировать: К сожалению, у меня нет другого предложения по вашей проблеме, однако у меня есть предупреждение. Вы должны обязательно масштабировать свое изображение перед отображением, 1536x2048 слишком велика для обработки iphone и совершенно ненужно для экрана 320x480. В противном случае у вас наверняка случится сбой приложений из-за низкой памяти в будущем - если не сейчас.

+0

, к сожалению, я установил атрибут размера в нужном значение, я даже вошел в нее вручную ... Проблема не в размере, а в том, что изображение отображается в пейзаже (вращение -PI/2) действительно с портретом, что было бы правильной ориентацией фотографий. Я попытался загрузить фотографию в UIImage и с UIImage, ориентация в порядке, я не могу понять ... У вас была бы другая идея? мой код, чтобы загрузить фото ниже: MockPhoto * т = [[MockPhoto Alloc] initWithURL: @ "расслоение: //img3.jpg" smallURL: @ "расслоение: //img3.jpg" размер: CGSizeMake (1536,0, 2048,0)]; – Taku

+0

Arg кажется, что вы правы ... Я попытался уменьшить масштаб изображения, и TTPhotoViewController больше не испортится, а затем я попытаюсь перемасштабировать его до его первоначального размера, и проблема снова возникает. Я не могу понять эту проблему как «ограничение памяти», поскольку моя фотография была сделана с моим iPhone; Кроме того, UIImageView хорошо отображает его ... Если у вас есть предложения, я буду очень доволен. – Taku

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