Ich habe ein UIImageView mit einem Bild darin. Ich habe das Bild vor der Anzeige gedreht, indem ich die Transform-Eigenschaft von UIImageView auf CGAffineTransformMakeRotation (Winkel) gesetzt habe, wobei Winkel der Winkel im Bogenmaß ist.Erstellen eines UIImage aus einem gedrehten UIImageView
Ich möchte in der Lage sein, eine andere UIImage zu erstellen, die der gedrehten Version entspricht, die ich in meiner Ansicht sehen kann.
ich fast da bin, indem Sie das Bild Kontext Dreh bekomme ich ein gedrehtes Bild:
- (UIImage *) rotatedImageFromImageView: (UIImageView *) imageView
{
UIImage *rotatedImage;
// Get image width, height of the bounding rectangle
CGRect boundingRect = [self getBoundingRectAfterRotation: imageView.bounds byAngle:angle];
// Create a graphics context the size of the bounding rectangle
UIGraphicsBeginImageContext(boundingRect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
// Rotate and translate the context
CGAffineTransform ourTransform = CGAffineTransformIdentity;
ourTransform = CGAffineTransformConcat(ourTransform, CGAffineTransformMakeRotation(angle));
CGContextConcatCTM(context, ourTransform);
// Draw the image into the context
CGContextDrawImage(context, CGRectMake(0, 0, imageView.image.size.width, imageView.image.size.height), imageView.image.CGImage);
// Get an image from the context
rotatedImage = [UIImage imageWithCGImage: CGBitmapContextCreateImage(context)];
// Clean up
UIGraphicsEndImageContext();
return rotatedImage;
}
jedoch das Bild nicht um seine Mitte gedreht wird. Ich habe alle Arten von Transformationen versucht, die mit meiner Rotation verkettet sind, um sie um die Mitte rotieren zu lassen, aber ohne Erfolg. Vermisse ich einen Trick? Ist das überhaupt möglich, da ich den Kontext und nicht das Bild rotiere?
Immer verzweifelt, um dies jetzt zu arbeiten, so würde jede Hilfe geschätzt werden.
Dave
EDIT: Ich habe mehrmals für meine boundingRect Code gefragt worden, so ist es hier:
- (CGRect) getBoundingRectAfterRotation: (CGRect) rectangle byAngle: (CGFloat) angleOfRotation {
// Calculate the width and height of the bounding rectangle using basic trig
CGFloat newWidth = rectangle.size.width * fabs(cosf(angleOfRotation)) + rectangle.size.height * fabs(sinf(angleOfRotation));
CGFloat newHeight = rectangle.size.height * fabs(cosf(angleOfRotation)) + rectangle.size.width * fabs(sinf(angleOfRotation));
// Calculate the position of the origin
CGFloat newX = rectangle.origin.x + ((rectangle.size.width - newWidth)/2);
CGFloat newY = rectangle.origin.y + ((rectangle.size.height - newHeight)/2);
// Return the rectangle
return CGRectMake(newX, newY, newWidth, newHeight);
}
Was ist das 'getBoundingRectAfterRotation' Funktion? – bmdhacks
Hallo @bmdhacks die getBoundingRectAfterRotation ist eine Methode, die ich erstellt habe, so dass Sie es in keiner der Cocoa-Touch-Klassen finden. Es nimmt ein rect und einen angle als Argumente und gibt ein neues CGRect zurück, das das ursprüngliche rect einschließen würde, wenn es um den gegebenen Winkel gedreht würde. –
Hallo @bmdhacks aufgrund der großen Nachfrage haben die Methode in einer Bearbeitung zu meiner ursprünglichen Frage hinzugefügt. –