2016-07-28 5 views
0

Ich möchte die UIImage Größe ändern, so dass ich unten Code verwendet.UImage Ausrichtung beim Zeichnen in UIGraphicsBeginImageContext geändert

Der obige Code funktioniert gut, aber die Ausrichtung von destImage wurde geändert. Ich weiß nicht wie.

source.imageOrientation = 3 
destImage.imageOrientation = 0 

Kann mir jemand sagen, wie man Bild mit der gleichen Ausrichtung wie sourceImage Größe ändern?

Edited:

UIImage *scaleImage = [UIImage imageWithCGImage:destImage.CGImage 
           scale:sourceImage.scale orientation:sourceImage.imageOrientation]; 

Editiert:

Ich erhalte this Ergebnis nach der Größe des Bildes.

Ich habe oben genannten Code auch versucht. Aber es gibt mir immer noch eine entgegengesetzte Orientierung.

+0

Ekata versuchen, eine andere Lösung – user3182143

+0

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

+0

@fishinear Ich habe diesen Code verwendet aber es hat nicht funktioniert, deshalb habe ich diese Frage gestellt. –

Antwort

0

die Imageview Resize

CALayer *layer; 
layer=self.view.layer; 
UIGraphicsBeginImageContext(self.view.bounds.size); 
CGContextClipToRect (UIGraphicsGetCurrentContext(),captureFrame); //Give your frame of image here(x,y,width,height) 
[layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

Auch unter Code versuchen

UIGraphicsBeginImageContext(self.frame.size); 
[drawImage.image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 3.0); 
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 0.0, 0.0, 1.0); 
CGContextStrokePath(UIGraphicsGetCurrentContext()); 
CGContextFlush(UIGraphicsGetCurrentContext()); 
drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+0

Danke für die Antwort. Lass mich diese Lösung ausprobieren. –

+0

Können Sie mir bitte "captureFrame" erklären? Muss Frame des Quellbildes übergeben werden? –

+0

Ja übergeben Sie es Ihrem Quellframe – user3182143

0

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 orientationModeUIImageOrientationUp. 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; 
} 
+0

Ok Danke. Lass es mich versuchen. –

Verwandte Themen