Проблема с ориентацией фотографии в TTPhotoViewController от Three20? - PullRequest
1 голос
/ 04 февраля 2010

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

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

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

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

РЕДАКТИРОВАТЬ: Кажется, это вопрос размера. Я попытался уменьшить свою фотографию, и TTPhotoViewController больше не испортил ее, а затем я пытаюсь изменить ее первоначальный размер, и проблема снова возникает. Я не могу понять эту проблему как «ограничение памяти», так как моя фотография была сделана на моем iPhone; более того, UIImageView хорошо его отображает ...

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

Ответы [ 2 ]

2 голосов
/ 16 апреля 2012

для изменения размера как альбомных, так и портретных изображений с правильной ориентацией из камеры и галереи. Я использую эту функцию:

-(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 голос
/ 04 февраля 2010

Возможно, вы установили size: attribute из photoSource на неправильное значение.

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

...