• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 在绘制上下文时在 UIImage 上应用 CATransform3D

[复制链接]
菜鸟教程小白 发表于 2022-12-12 23:32:48 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有几个 UIImageView 并在其 layer 属性上应用了 CATransform3D,现在我想获得一个图像(通过转换将所有图像组合成一个)。

为此,我使用 CoreGraphics 框架在上下文中绘制图像,然后获取结果图像。

需要实现这个:

  • 使用 CATransform3D 在上下文中绘制每个图像,然后从图像上下文中获取图像。

我试过了,但没有成功。

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextConcatCTM(context, CATransform3DGetAffineTransform(imageView.layer.transform));
CGContextDrawImage(context, (CGRect){ CGPointZero, imageView.image.size }, [imageView.image CGImage]);
CGContextTranslateCTM(context, 0, imageView.frame.size.height);
CGContextScaleCTM(context, 1.0, -1.0);

UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();

我也尝试过 CoreImage 框架,但仍然没有运气。

CIImage *ciImage = [CIImage imageWithData:UIImagePNGRepresentation(imageView.image)];
CIContext *context = [CIContext contextWithOptions:nil];
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeRectangle context:context options{CIDetectorAccuracy: CIDetectorAccuracyHigh}];

CIRectangleFeature *rect = (CIRectangleFeature *)[detector featuresInImage:ciImage options{CIDetectorImageOrientation : [NSNumber numberWithInt:1]}].firstObject;

CIFilter *filterMain = [CIFilter filterWithName"CIPerspectiveCorrection"];
[filterMain setValue:[CIVector vectorWithCGPoint:rect.topLeft] forKey"inputTopLeft"];
[filterMain setValue:[CIVector vectorWithCGPoint:rect.topRight] forKey"inputTopRight"];
[filterMain setValue:[CIVector vectorWithCGPoint:rect.bottomRight] forKey"inputBottomRight"];
[filterMain setValue:[CIVector vectorWithCGPoint:rect.bottomLeft] forKey"inputBottomLeft"];
[filterMain setValue:sourceCIImage forKey:kCIInputImageKey];

CIImage *outputImage = [filterMain valueForKey:kCIOutputImageKey];
UIImage *resultImage = [UIImage imageWithCIImageutputImage];

about 行代码给了我一些奇怪的结果。

我尝试过的另一件事是 drawViewHierarchyInRect:afterScreenUpdates: 方法,但它给了我非常模糊的图像。

那么如何使用 CATransform3D 在上下文中绘制图像?如果有人遇到过此类问题并已解决,请分享您的想法。任何帮助将不胜感激。

注意:我不是在谈论 CGAffineTransformation 它的 CATransform3D



Best Answer-推荐答案


Apple 提供了一个名为 CoreImage 的框架,您可以通过应用过滤器来获得转换后的图像。您可以使用 CIPerspectiveTransform 过滤器通过传递 image/imageview 的四个角(TopLeft、TopRight、BottomLeft 和 BottomRight)来获取转换后的图像。

我已经回答过此类问题 here...

关于ios - 在绘制上下文时在 UIImage 上应用 CATransform3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41437827/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap