मेरे पास एक UIImage
ऐसा UIImageOrientationUp
चित्र (चित्र) है जिसे मैं 90 डिग्री तक (परिदृश्य में) काउंटर-क्लॉकवाइज घुमाना चाहूंगा। मैं एक का उपयोग नहीं करना चाहता CGAffineTransform
। मैं चाहता हूं कि पिक्सल्स UIImage
वास्तव में पोजिशन शिफ्ट हों। मैं कोड के एक ब्लॉक का उपयोग कर रहा हूं (नीचे दिखाया गया है) मूल रूप UIImage
से ऐसा करने के लिए इसका उद्देश्य है। मैंने वर्तमान आकार के रूप में एक लक्ष्य आकार निर्धारित किया है UIImage
लेकिन मुझे एक त्रुटि मिलती है:
(त्रुटि): CGBitmapContextCreate: अमान्य डेटा बाइट्स / पंक्ति: 8 पूर्णांक बिट्स / घटक, 3 घटकों, kCGImageAlphaPremultipliedLast के लिए कम से कम 1708 होना चाहिए।
(जब भी मैं लक्ष्य आकार BTW के रूप में एक छोटे आकार प्रदान करता हूं तो मुझे कोई त्रुटि नहीं मिलती है)। मैं UIImage
वर्तमान आकार को संरक्षित करते हुए सिर्फ कोर ग्राफिक्स फ़ंक्शंस का उपयोग करके अपनी 90 डिग्री CCW कैसे प्राप्त कर सकता हूं ?
-(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;
}