Повернуть UIImage: не могу заставить его работать - PullRequest
0 голосов
/ 08 ноября 2011

Это часть большого проекта, но моя проблема может быть упрощена следующим образом: у меня есть простое представление с 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).Может ли кто-нибудь сказать мне, что происходит не так?Спасибо.

Ответы [ 2 ]

1 голос
/ 08 ноября 2011
    //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
0 голосов
/ 24 сентября 2012

Мне удалось решить мою проблему. Вот мое решение, используя CGImageRef и [UIImage imageWithCGImage: scale: direction:]

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];`
...