Saya memiliki UIImage
itu UIImageOrientationUp
(potret) yang ingin saya putar berlawanan arah jarum jam sebesar 90 derajat (ke lansekap). Saya tidak ingin menggunakan a CGAffineTransform
. Saya ingin piksel UIImage
untuk mengubah posisi. Saya menggunakan blok kode (ditunjukkan di bawah) yang awalnya dimaksudkan untuk mengubah ukuran UIImage
untuk melakukan ini. Saya menetapkan ukuran target sebagai ukuran saat ini UIImage
tetapi 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 UIImage
90 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;
}