Ich habe eine UIImage
das ist UIImageOrientationUp
(Hochformat), die ich gegen den Uhrzeigersinn um 90 Grad drehen möchte (ins Querformat). Ich möchte nicht mit einem CGAffineTransform
. Ich möchte die Pixel des UIImage
um die Position tatsächlich zu verändern. Ich verwende einen Codeblock (siehe unten), der ursprünglich für die Größenänderung einer UIImage
um dies zu tun. Ich setze eine Zielgröße als die aktuelle Größe der UIImage
aber ich erhalte eine Fehlermeldung:
(Fehler): CGBitmapContextCreate: ungültige Datenbytes/Zeile: sollte mindestens 1708 für 8 Integer-Bits/Komponente, 3 Komponenten, kCGImageAlphaPremultipliedLast sein.
(Ich erhalte übrigens keine Fehlermeldung, wenn ich eine KLEINERE Größe als Zielgröße angebe). Wie kann ich meine Datei ROTATE UIImage
90 Grad gegen den Uhrzeigersinn, indem man nur die wichtigsten Grafikfunktionen verwendet und die aktuelle Größe beibehält?
-(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;
}