2012-04-09 5 views
0

Ich denke, warum ich Bildverzerrung auf meiner App, wenn ich iOS 4.3 auf iPad Simulator und Gerät verwenden. Schau dir den Screenshot an. Das gleiche Bild wird normalerweise auf iOS 5.1 Simulator und Gerät angezeigt. Schau dir den zweiten Screenshot an ... Wie soll ich das schaffen? Kann es sein, dass es möglich ist, etwas Code zu schreiben, bevor das JPEG angezeigt wird? Normal on iOS 5.1 Leider muss ich es reparieren, coz meine App muss irgendwie auf iOS 4.3 arbeiten.Image negative Verzerrung auf iOS 4.3

Dies ist ein Verfahren, das für die Erzeugung von Daumen verwendet wird:

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

Allerdings, wenn ich mein Bild nicht diese verwenden, um vorzubereiten, ist es immer noch negativ ist, arbeitet aber langsamer, weil Bilder werden automatisch in der Größe angepasst.

Diese Methode wird zur Anzeige Bild verwendet:

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

auf diese Weise:

[current setImage:thumb forState:UIControlStateNormal]; 

Ja, ich vergaß zu erwähnen, dass diese Jungs einfach-Buttons eines View-Controller sind.

+0

Wahrscheinlich, wenn Sie Ihre .jpg zu .png konvertieren, funktioniert es. – Garoal

+0

Sie müssen Ihre Frage bearbeiten. Sagen Sie uns, wie Sie die Bilddateien erstellen, und zeigen Sie uns den Code, der sie lädt und auf dem Bildschirm anzeigt. –

+0

Fertig, ich habe eine Methode hinzugefügt, die ich verwende, um die Größe zu ändern. – wzbozon

Antwort

1

Ich stieß auf das gleiche Problem auf 4.3 - stellt sich heraus, dass die Bilder mit CMYK-Farben gespeichert wurden. Durch den Wechsel zu RGB und das erneute Speichern der Bilder wurde das Problem behoben.

Verwandte Themen