2012-04-09 3 views
0

Я думаю, почему я получаю искажение изображения в своем приложении, когда я использую iOS 4.3 на iPad Simulator и устройстве. Посмотрите на скриншот. Такое же изображение отображается на экране iOS 5.1 Simulator и устройства. Посмотрите на второй снимок экрана ... Как мне это сделать? Может быть, можно написать код перед отображением JPEG? Distorted on iOS 4.3 Normal on iOS 5.1 К сожалению, я должен отремонтировать его, потому что мое приложение должно как-то работать на iOS 4.3.Изображение отрицательное искажение на iOS 4.3

Это метод, который используется для генерации превью:

- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize 
{ 
UIImage *sourceImage = self; 
UIImage *newImage = nil;   
CGSize imageSize = sourceImage.size; 
CGFloat width = imageSize.width; 
CGFloat height = imageSize.height; 
CGFloat targetWidth = targetSize.width; 
CGFloat targetHeight = targetSize.height; 
CGFloat scaleFactor = 0.0; 
CGFloat scaledWidth = targetWidth; 
CGFloat scaledHeight = targetHeight; 
CGPoint thumbnailPoint = CGPointMake(0.0,0.0); 

if (CGSizeEqualToSize(imageSize, targetSize) == NO) 
{ 
    CGFloat widthFactor = targetWidth/width; 
    CGFloat heightFactor = targetHeight/height; 

    if (widthFactor > heightFactor) 
     scaleFactor = widthFactor; // scale to fit height 
    else 
     scaleFactor = heightFactor; // scale to fit width 
    scaledWidth = width * scaleFactor; 
    scaledHeight = height * scaleFactor; 

    // center the image 
    if (widthFactor > heightFactor) 
    { 
     thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; 
    } 
    else 
     if (widthFactor < heightFactor) 
     { 
      thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5; 
     } 
}  

UIGraphicsBeginImageContext(targetSize); // this will crop 

CGRect thumbnailRect = CGRectZero; 
thumbnailRect.origin = thumbnailPoint; 
thumbnailRect.size.width = scaledWidth; 
thumbnailRect.size.height = scaledHeight; 

[sourceImage drawInRect:thumbnailRect]; 

newImage = UIGraphicsGetImageFromCurrentImageContext(); 
if(newImage == nil) 
    NSLog(@"could not scale image"); 

//pop the context to get back to the default 
UIGraphicsEndImageContext(); 
return newImage; 
} 

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

Этот метод используется для отображения изображения:

-(void) setImage:(UIImage*)image forState:(UIControlState) state 
{ 
[self.buttonView setImage:image forState:state]; 
} 

таким образом:

[current setImage:thumb forState:UIControlStateNormal]; 

Да, я забыл упомянуть, что эти ребята просто пользовательские кнопки контроллера представления.

+0

Возможно, если вы конвертируете свой .jpg в .png, он работает. – Garoal

+0

Вам нужно изменить свой вопрос. Расскажите, как вы создаете файлы изображений, и покажите нам код, который загружает их и помещает на экран. –

+0

Выполнено, я добавил метод, который я использую для изменения размера. – wzbozon

ответ

1

Я столкнулся с той же проблемой на 4.3 - получается, что изображения были сохранены с цветами CMYK. Переход на RGB и повторное сохранение изображений заставили проблему уйти.

Смежные вопросы