Saya memiliki UIImageitu UIImageOrientationUp(potret) yang ingin saya putar berlawanan arah jarum jam sebesar 90 derajat (ke lansekap). Saya tidak ingin menggunakan a CGAffineTransform. Saya ingin piksel UIImageuntuk mengubah posisi. Saya menggunakan blok kode (ditunjukkan di bawah) yang awalnya dimaksudkan untuk mengubah ukuran UIImageuntuk melakukan ini. Saya menetapkan ukuran target sebagai ukuran saat ini UIImagetetapi saya mendapatkan kesalahan:
(Kesalahan): CGBitmapContextCreate: byte / baris data yang tidak valid: harus setidaknya 1708 untuk 8 bit integer / komponen, 3 komponen, kCGImageAlphaPremultipliedLast.
(Saya tidak mendapatkan kesalahan setiap kali saya memberikan ukuran KECIL sebagai ukuran target BTW). Bagaimana saya bisa MEMUTARKAN UIImage90 derajat CCW saya menggunakan fungsi inti grafis sambil mempertahankan ukuran saat ini?
-(UIImage*)reverseImageByScalingToSize:(CGSize)targetSize:(UIImage*)anImage
{
UIImage* sourceImage = anImage;
CGFloat targetWidth = targetSize.height;
CGFloat targetHeight = targetSize.width;
CGImageRef imageRef = [sourceImage CGImage];
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef);
if (bitmapInfo == kCGImageAlphaNone) {
bitmapInfo = kCGImageAlphaNoneSkipLast;
}
CGContextRef bitmap;
if (sourceImage.imageOrientation == UIImageOrientationUp || sourceImage.imageOrientation == UIImageOrientationDown) {
bitmap = CGBitmapContextCreate(NULL, targetHeight, targetWidth, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo);
} else {
bitmap = CGBitmapContextCreate(NULL, targetWidth, targetHeight, CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), colorSpaceInfo, bitmapInfo);
}
if (sourceImage.imageOrientation == UIImageOrientationRight) {
CGContextRotateCTM (bitmap, radians(90));
CGContextTranslateCTM (bitmap, 0, -targetHeight);
} else if (sourceImage.imageOrientation == UIImageOrientationLeft) {
CGContextRotateCTM (bitmap, radians(-90));
CGContextTranslateCTM (bitmap, -targetWidth, 0);
} else if (sourceImage.imageOrientation == UIImageOrientationDown) {
// NOTHING
} else if (sourceImage.imageOrientation == UIImageOrientationUp) {
CGContextRotateCTM (bitmap, radians(90));
CGContextTranslateCTM (bitmap, 0, -targetHeight);
}
CGContextDrawImage(bitmap, CGRectMake(0, 0, targetWidth, targetHeight), imageRef);
CGImageRef ref = CGBitmapContextCreateImage(bitmap);
UIImage* newImage = [UIImage imageWithCGImage:ref];
CGContextRelease(bitmap);
CGImageRelease(ref);
return newImage;
}