Saya memutar gambar secara terbalik tetapi bagaimana membaliknya secara horizontal

saya memuat gambar dari rol kamera, tetapi gambar ini terbalik. jadi saya menulis metode untuk memutarnya.

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;

tidak apa-apa, tapi sekarang saya harus membaliknya secara horizontal, dan saya tidak tahu bagaimana cara melakukannya. saya mencoba melakukan ini pada hari kedua.

Terima kasih atas bantuan Anda


person Tomasz Szulc    schedule 29.07.2012    source sumber


Jawaban (1)


Sudahkah Anda mencoba ini:

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

?

Anda juga dapat melakukan rotasi dengan menggunakan transformasi:

imageView.transform = CGAffineTransformMakeRotation(M_PI);

Anda dapat menggabungkan dua transformasi menjadi satu seperti ini:

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

Jika Anda ingin membuat objek UIImage Anda sendiri, daripada memanipulasi tampilan dan transformasi, saya tetap menyarankan Anda untuk menggunakan pendekatan yang dijelaskan di atas untuk membuat tampilan menggambar sesuai keinginan Anda, lalu ubah konten UIView Anda menjadi objek UIImage:

UIGraphicsBeginImageContext(rect.size);
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage* viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
person sergio    schedule 29.07.2012
comment
saya harus mengubah UIImage dan menggambarnya di CGContextRef, jadi .transform tidak tersedia. Saya mencoba menambahkan UIImage ke UIImageView, memutarnya dan membuat image = imageView.image, tetapi tidak berhasil. - person Tomasz Szulc; 29.07.2012
comment
Silakan, lihat hasil edit saya tentang bagaimana Anda dapat mengubah konten tampilan menjadi gambar. - person sergio; 29.07.2012
comment
ini berfungsi tetapi saya menyetel imageview.frame = CGRectMake(111,122,768,1024) dan membuat konteks di 0,0,768,1024. ada saran? - person Tomasz Szulc; 29.07.2012
comment
oke terima kasih atas bantuannya. saya menambahkan imageView ke subView dan merendernya. - person Tomasz Szulc; 29.07.2012