tea*_*bot 32 iphone core-graphics uikit
我有一个UIView,我试图使用[CALayer renderInContext:]渲染到UIImage中.但是,我发现结果图像是垂直翻转的.由于坐标系不同,我有点期待这一点.然而,我尝试用仿射变换将上下文恢复正常 - 但它没有任何影响:
CGAffineTransform flipVertical = CGAffineTransformMake(
1, 0, 0, -1, 0, imageContextHeight
);
CGContextConcatCTM(imageContext, flipVertical);
CGImageRef cgImage = CGBitmapContextCreateImage(imageContext);
UIImage* uiImage = [[UIImage imageWithCGImage:cgImage] retain];
CGImageRelease(cgImage);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
ben*_*ioT 32
这是我根据这个答案编写的一些代码,以防它对任何人都有帮助:
#import <QuartzCore/QuartzCore.h>
...
+ (UIImage *) flipImageVertically:(UIImage *)originalImage {
UIImageView *tempImageView = [[UIImageView alloc] initWithImage:originalImage];
UIGraphicsBeginImageContext(tempImageView.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform flipVertical = CGAffineTransformMake(
1, 0, 0, -1, 0, tempImageView.frame.size.height
);
CGContextConcatCTM(context, flipVertical);
[tempImageView.layer renderInContext:context];
UIImage *flipedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[tempImageView release];
return flipedImage;
}
Run Code Online (Sandbox Code Playgroud)
这是与上面相同的代码(benvolioT的答案),但在SWIFT 4.0中
import QuartzCore
...
func flipImageVertically(originalImage:UIImage) -> UIImage{
let tempImageView:UIImageView = UIImageView(image: originalImage)
UIGraphicsBeginImageContext(tempImageView.frame.size)
let context:CGContext = UIGraphicsGetCurrentContext()!
let flipVertical: CGAffineTransform = CGAffineTransform(a: 1, b: 0, c: 0, d: -1, tx: 0, ty: tempImageView.frame.size.height)
context.concatenate(flipVertical)
tempImageView.layer.render(in: context)
let flippedImage:UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return flippedImage
}
Run Code Online (Sandbox Code Playgroud)
这是SWIFT中更好的方法:
func flipImageVertically(originalImage:UIImage) -> UIImage {
let image:UIImage = UIImage(CGImage: originalImage.CGImage, scale: 1.0, orientation: UIImageOrientation.RightMirrored)!
return image
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26060 次 |
最近记录: |