मेरे पास एक 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;
}