Es gibt keine Notwendigkeit, die orientationMode
für das Zielbild zu setzen. Die orientationMode
zeigt an, wie das Bild beim Zeichnen gedreht wird. Das heißt, die UIImage
enthält die ursprünglichen, nicht gedrehten Daten (normalerweise im Format CGImage
) und die orientationMode
-Eigenschaft. Wenn Sie das UIImage
zeichnen (zum Beispiel wenn Sie es zu einem UIImageView
hinzufügen), wird es es ebenso wie erforderlich drehen.
Ihr Code zeichnet auch das Bild, und daher ist es dreht:
[sourceImage drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *destImage = UIGraphicsGetImageFromCurrentImageContext();
Die destImage
wird das gedrehte Originaldaten enthalten, und orientationMode
UIImageOrientationUp
. Das Ergebnis ist, dass das Zeichnen der destImage
das gleiche Bild mit der gleichen Ausrichtung wie die sourceImage
ergibt.
Der einzige Unterschied kommt, wenn Sie tatsächlich die CGImage
Originaldaten von jedem verwenden (und daher die orientationMode
Eigenschaft ignorieren), dann wird das Zielbild eine gedrehte Version der Quelle sein. Wenn du mit dem CGImage
sowieso arbeiten werden, dann ist es besser, die CGImage
Level-Operationen zu verwenden, um die Größe des Bildes, zum Beispiel (das von http://fingertwister.tumblr.com/post/9074775714/code-to-create-a-resized-cgimage-from-a-cgimage kommt, ich habe es nicht überprüfen):
+ (CGImageRef)resizeCGImage:(CGImageRef)image toWidth:(int)width andHeight:(int)height {
// create context, keeping original image properties
CGColorSpaceRef colorspace = CGImageGetColorSpace(image);
CGContextRef context = CGBitmapContextCreate(NULL, width, height,
CGImageGetBitsPerComponent(image),
CGImageGetBytesPerRow(image),
colorspace,
CGImageGetAlphaInfo(image));
CGColorSpaceRelease(colorspace);
if(context == NULL)
return nil;
// draw image to context (resizing it)
CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
// extract resulting image from context
CGImageRef imgRef = CGBitmapContextCreateImage(context);
CGContextRelease(context);
return imgRef;
}
Ekata versuchen, eine andere Lösung – user3182143
Mögliches Duplikat von [UIIImage-Ausrichtung ändert sich beim Zeichnen in UIGraphicsBeginImageContext] (http://stackoverflow.com/questions/24283017/uiimage-orientation-is-changing-when-drawing-in-uigraphicsbeginimagecontext) – fishinear
@fishinear Ich habe diesen Code verwendet aber es hat nicht funktioniert, deshalb habe ich diese Frage gestellt. –