#iphone #uiimage #rotation
#iPhone #uiimage #поворот
Вопрос:
Это часть большого проекта, но мою проблему можно упростить следующим образом: у меня есть простой просмотр с помощью ImageView и кнопки «Повернуть». Всякий раз, когда я нажимаю кнопку, изображение внутри ImageView поворачивается на 90 градусов. Судя по большей части того, что я нашел на StackOverflow и других сайтах, это должно сработать (пожалуйста, обратите внимание, что мое изображение представляет собой квадратное изображение, ширина и высота которого равны 464):
- (UIImage *) getRotatedImageFromImage:(UIImage*)image:(int)rotate_index
{
UIImage *rotatedImage;
// Get image width, height of the bounding rectangle
CGRect boundingRect = CGRectMake(0, 0, image.size.width, image.size.height);
NSLog(@"width = %f, height = %f",boundingRect.size.width,boundingRect.size.height);
NSLog(@"rotate index = %d",rotate_index);
// Create a graphics context the size of the bounding rectangle
UIGraphicsBeginImageContext(boundingRect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextRotateCTM(context, rotate_index*M_PI/2);
// Draw the image into the context
[image drawInRect:boundingRect];
// Get an image from the context
rotatedImage = UIGraphicsGetImageFromCurrentImageContext();
// Clean up
UIGraphicsEndImageContext();
NSLog(@"rotatedImage size = (%f, %f)",rotatedImage.size.width,rotatedImage.size.height);
return rotatedImage;
}
- (IBAction) rotateImage
{
NSLog(@"rotate image");
rotateIndex ;
if (rotateIndex >= 4)
rotateIndex = 0;
[imageView setImage: [self getRotatedImageFromImage:imageToSubmit :rotateIndex]];
}
Но по некоторым причинам это не работает. Что у меня есть: при нажатии кнопки изображение появляется только тогда, когда rotateIndex принимает значение 0, и изображение совпадает с исходным изображением (что и ожидалось). Когда rotateIndex равен 1, 2, 3, в ImageView ничего не отображается, даже если размер распечатанного rotatedImage правильный (т. Е. 464 x 464).
Кто-нибудь может сказать мне, что происходит не так?
Спасибо.
Ответ №1:
//create rect
UIImageView *myImageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"image.png"]];
//set point of rotation
myImageView.center = CGPointMake(100.0,100.0);
//rotate rect
myImageView.transform =CGAffineTransformMakeRotation(3.14159265/2); //rotation in radians
Комментарии:
1. Я пытался использовать UIImageView, но после преобразования доступ к myImageView.image просто предоставит вам исходное изображение, а не повернутое изображение. Есть ли способ получить преобразованное изображение из UIImageView?
2. вам нужно сыграть здесь: (3.14159265 / 2); попробуйте любое другое значение вместо 2. и обратите внимание на изменение в преобразовании изображения.
3. Я замечаю, что изображение преобразовано в ImageView. Однако я хочу взять преобразованное изображение и отправить его на сервер, а myImageView.image не выдает мне преобразованное.
4. У меня есть решение, но я не смог его правильно отформатировать. Извините за уродство и мои ограниченные знания о форматировании с помощью StackOverflow.
Ответ №2:
Я смог решить свою проблему. Вот мое решение, использующее CGImageRef и [UIImage imageWithCGImage: масштаб: ориентация:]
CGImageRef cgImageRef = CGBitmapContextCreateImage(context);
UIImageOrientation imageOrientation;
switch (rotate_index) {
case 0: imageOrientation = UIImageOrientationUp; break;
case 1: imageOrientation = UIImageOrientationLeft; break;
//2 more cases for rotate_index = 2 and 3
}
rotatedImage = [UIImage imageWithCGImage:cgImageRef scale:1.0 orientation:imageOrientation];`