2016-04-18 14 views
0

Hoffe wirklich, dass Sie auf diesem helfen kann, wurde nervt mich den ganzen TagIOS Objective C Halten orienation aber Bild drehen Daten

Ist es möglich, die orienation eines UIImage (Say Landschaft) zu halten, aber das Bild im Inneren drehen?

ich meine UIImage sparen mit dem folgenden Code

[UIImagePNGRepresentation(image) writeToFile:pngPath atomically:YES]; 

wo Bild ein UIImage ist.

Das Bild unten zeigt, was in Abhängigkeit von der Ausrichtung des Geräts gespeichert wird.

der Boden 4 ist, was ich

Orientation Image

Grundsätzlich ich die pictue auf seiner Seite im Querformat zu sein, egal zu bekommen versuchen zu erreichen versuchen, die Art und Weise wird das Gerät wieder

Jede Hilfe sehr geschätzt wird

Mark

Antwort

0

Versuchen Sie, diese

UIImage* landscapeImage = [UIImage imageWithCGImage:image.CGImage 
              scale:image.scale 
             orientation:UIImageOrientationLeft]; 
[UIImagePNGRepresentation(landscapeImage) writeToFile:pngPath atomically:YES]; 
+0

Leider es tut nichts, was ich es auf das origianl Bild angewendet, die den Kopf im Inneren Landschaft mit dem Bild ist und es cam wieder mit dem gleichen Bild, das ich es brauchen rechts abzubiegen 90 Grad, aber bleiben Sie in der Landschaft –

+0

Der obige Code ändert nur die Ausrichtung auf Landscape links. Wenn Sie über ein rotierendes Bild sprechen, lesen Sie den Link http: // stackoverflow.com/questions/11667565/how-to-rotate-ein-Bild-90-Grad-auf-ios –

+0

Dank sah ich, dass eine lange mit etwa 100 die alle das Bild drehen, was ich will, aber alle entweder drehen die Ausrichtung als gut oder quetscht das Bild zu passen –

0

Ich würde nur die Bilddatei speichern, dann ändern Sie die ImageView in der Benutzeroberfläche. Solange das Bild immer im Portrait-Modus ist zuerst könnten Sie einfach die Bildansicht um 90 Grad wie folgt drehen:

self.imageView.transform = CGAffineTransformMakeRotation(M_PI_2); 

dann setzen die Imageview-Modus Aspect Fit

self.imageView.contentMode = UIViewContentModeScaleAspectFit; 

Dies wird jedoch funktioniert nicht, wenn das Bild in die andere Richtung gedreht werden muss oder wenn es bereits im Querformat positioniert ist.

0

Hilft es, die Ausrichtung der aufgenommenen Bilder zu korrigieren?

https://stackoverflow.com/a/15039536

Vielleicht können Sie Inspiration für Ihr eigenes Problem, wenn nicht gefunden. Im Grunde erstellen Sie Kontext mit der richtigen Breite/Höhe, transformieren Sie für die Rotation, zeichnen Sie Bild, speichern Sie als neues Bild.

CGContextRef ctx = CGBitmapContextCreate(NULL, image.size.width, image.size.height, 
    CGImageGetBitsPerComponent(image.CGImage), 0, 
    CGImageGetColorSpace(image.CGImage), 
    CGImageGetBitmapInfo(image.CGImage)); 
    CGContextConcatCTM(ctx, transform); 
CGContextDrawImage(ctx, CGRectMake(0,0,image.size.height,image.size.width), image.CGImage); 
//or 
CGContextDrawImage(ctx, CGRectMake(0,0,image.size.width,image.size.height), image.CGImage); 

CGImageRef cgimg = CGBitmapContextCreateImage(ctx); 
UIImage *img = [UIImage imageWithCGImage:cgimg]; 

Lesen Sie auch Kommentare zu verschiedenen Ergebnissen von Kamera und Galerie.

Wenn Sie nur zeigen wollen, dass es gedreht wird, können Sie die UIView wie @bryannorden schlägt vor, zu transformieren.

+0

haben eingebettet Ihr Bild, jetzt, wo ich es sehe, wollen Sie immer die Person im Portrait, egal in welcher Richtung sie aufgenommen wurde. Sie müssen also die Landschaftsbilder vor (oder nach der Rotation) zuschneiden. Sie können auch CGRectMake in meinem Beispiel ändern. Beginnen Sie einfach bei negativen Koordinaten und lassen Sie es außerhalb der Zeichenfläche zeichnen. – user6227617

+0

Wenn Sie mit ImageView arbeiten, benötigen Sie einen Ausschnitt, siehe hier: http://StackOverflow.com/questions/6638623/uiviewcontentmodescaleaspectfill-not-clipping – user6227617

0
NSBitmapImageRep *bit_map = [[NSBitmapImageRep alloc] 
          initWithBitmapDataPlanes:NULL 
          pixelsWide:img_size.width 
          pixelsHigh:img_size.height 
          bitsPerSample:8 
          samplesPerPixel:4 
          hasAlpha:YES 
          isPlanar:NO 
          colorSpaceName:NSDeviceRGBColorSpace 
          bitmapFormat:NSAlphaFirstBitmapFormat 
          bytesPerRow:0 
          bitsPerPixel:0]; 
NSAffineTransform *trans2=[NSAffineTransform transform]; 
[trans2 translateXBy:dirtyRect.size.width/2 yBy:dirtyRect.size.height/2]; 
[trans2 rotateByDegrees: angle]; 
[trans2 concat]; 

NSGraphicsContext *g=[NSGraphicsContext graphicsContextWithBitmapImageRep:bit_map]; 
[NSGraphicsContext saveGraphicsState]; 
[NSGraphicsContext setCurrentContext:g]; 
[img drawInRect:NSMakeRect(0, 0, img_size.width, img_size.height)]; 
[NSGraphicsContext restoreGraphicsState]; 


[bit_map drawInRect:NSMakeRect(-img_size.width/2, -img_size.height/2, img_size.width, img_size.height)]; 

sehen sie in Aktion: https://www.youtube.com/watch?v=DD_KYaq3SSg