Я переворачиваю изображение вверх ногами, но как перевернуть его по горизонтали

Я загружаю изображение из фотопленки, но это изображение перевернуто. поэтому я написал метод, чтобы повернуть его.

CGImageRef imageRef = [image CGImage];

float width = CGImageGetWidth(imageRef);
float height = CGImageGetHeight(imageRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
Byte *rawData = malloc(height * width * 4);
Byte bytesPerPixel = 4;
int bytesPerRow = bytesPerPixel * width;
Byte bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
int byteIndex = 0;
CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);

Byte *rawData2 = malloc(height * width * 4);

for (int i = 0 ; i < width * height ; i++) {
    int index = (width * height) * 4;
    rawData2[byteIndex + 0] = rawData[index - byteIndex + 0];
    rawData2[byteIndex + 1] = rawData[index - byteIndex + 1];
    rawData2[byteIndex + 2] = rawData[index - byteIndex + 2];
    rawData2[byteIndex + 3] = rawData[index - byteIndex + 3];

    byteIndex += 4;
}

CGContextRef ctx = CGBitmapContextCreate(rawData2, CGImageGetWidth( imageRef ), CGImageGetHeight( imageRef ), 8, CGImageGetBytesPerRow( imageRef ), CGImageGetColorSpace( imageRef ),kCGImageAlphaPremultipliedLast );

imageRef = CGBitmapContextCreateImage (ctx);
image = [UIImage imageWithCGImage:imageRef];

CGContextRelease(context);

return image;

это нормально, но теперь я должен перевернуть его по горизонтали, и я не знаю, как я могу это сделать. я пытаюсь сделать это второй день.

Спасибо за помощь


person Tomasz Szulc    schedule 29.07.2012    source источник


Ответы (1)


Вы пробовали это:

imageView.transform = CGAffineTransformMakeScale(-1, 1);

?

Вы также можете выполнить вращение, используя преобразование:

imageView.transform = CGAffineTransformMakeRotation(M_PI);

Вы можете объединить два преобразования в одно следующим образом:

imageView.transform = CGAffineTransformRotation(CGAffineTransformMakeScale(-1, 1), M_PI);

Если вы хотите создать свой собственный объект UIImage, а не манипулировать представлениями и преобразованиями, я бы все же посоветовал вам использовать описанный выше подход, чтобы представление рисовало изображение так, как вам нравится, а затем конвертировать содержимое UIView в объект UIImage:

UIGraphicsBeginImageContext(rect.size);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
person sergio    schedule 29.07.2012
comment
я должен преобразовать UIImage и нарисовать его на CGContextRef, поэтому .transform недоступен. Я пытаюсь добавить UIImage в UIImageView, повернуть его и сделать image = imageView.image, но это не работает. - person Tomasz Szulc; 29.07.2012
comment
Пожалуйста, посмотрите мое редактирование о том, как вы можете преобразовать содержимое представления в изображение. - person sergio; 29.07.2012
comment
это работает, но я установил imageview.frame = CGRectMake(111,122,768,1024), и он отображает контекст в 0,0,768,1024. любое предложение? - person Tomasz Szulc; 29.07.2012
comment
ок спасибо за помощь. я добавляю imageView в subView и визуализирую его. - person Tomasz Szulc; 29.07.2012