J'ai un UIImage
qui est UIImageOrientationUp
(portrait) que je voudrais faire pivoter dans le sens inverse des aiguilles d'une montre de 90 degrés (en paysage). Je ne veux pas utiliser de fichier CGAffineTransform
. Je veux que les pixels de la UIImage
position décalent réellement. J'utilise un bloc de code (illustré ci-dessous) destiné à l'origine à redimensionner un UIImage
pour ce faire. J'ai défini une taille cible comme taille actuelle du UIImage
mais j'obtiens une erreur:
(Erreur): CGBitmapContextCreate: octets / ligne de données non valides: doit être au moins 1708 pour 8 bits entiers / composant, 3 composants, kCGImageAlphaPremultipliedLast.
(Je n'obtiens pas d'erreur chaque fois que je fournis une taille PLUS PETITE que la taille cible BTW). Comment puis-je faire pivoter mon UIImage
90 degrés CCW en utilisant uniquement les fonctions graphiques de base tout en préservant la taille actuelle?
-(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;
}