ios - 将 UIImage 转换为 CIImage 时图像大小加倍

标签 ios objective-c iphone uiimage core-image

这是我的测试代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.uiImage = [self imageFromView:self.view];
    NSLog(@"Test1: uiImage.size = %@", NSStringFromCGSize(self.uiImage.size));

    self.ciImage = [[CIImage alloc] initWithCGImage:self.uiImage.CGImage];
    NSLog(@"Test1: ciImage.extent = %@", NSStringFromCGRect(self.ciImage.extent));

    self.uiImage = [UIImage imageNamed:@"test.jpg"];
    NSLog(@"Test2: uiImage.size = %@", NSStringFromCGSize(self.uiImage.size));

    self.ciImage = [[CIImage alloc] initWithCGImage:self.uiImage.CGImage];
    NSLog(@"Test2: ciImage.extent = %@", NSStringFromCGRect(self.ciImage.extent));

}

-(UIImage*)imageFromView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

我得到以下输出:

Test1: uiImage.size = {768, 1024}
Test1: ciImage.extent = {{0, 0}, {1536, 2048}}
Test2: uiImage.size = {400, 400}
Test2: ciImage.extent = {{0, 0}, {400, 400}}

我找不到为什么 Test1 中图像大小加倍。我该如何修复它?

最佳答案

UIImage大小以点为单位。 CIImage范围以像素为单位。当您捕获UIView时对于第一个测试,您是在视网膜屏幕上进行的,因此 1 点 == 2x2 像素。当您从文件加载第二个图像时,您正在加载非视网膜资源( test.jpg<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c6b2a3b5b286f4bee8acb6a1" rel="noreferrer noopener nofollow">[email protected]</a> ),因此 1 点 == 1x1 像素。

没有什么需要修复的 - 当您将 View 捕获为图像时,它的大小不会加倍,而是您正在捕获的 View 的大小(以像素为单位)。

如果您希望两个测试最终达到相同的规模,请提供资源的视网膜版本。

关于ios - 将 UIImage 转换为 CIImage 时图像大小加倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43228601/

相关文章:

objective-c - UIScrollView 不会调整高度以适应 subview

ios - 如何在 webpack/babel 构建中使用 CustomElement v1 polyfill?

ios - NSData :writeToFile returning error "File doesn' t exist"

iphone - 如何合并带有注释的 PDF 文件

iphone - 应用程序不会在 iOS6 上开始使用 testflight

iphone - 如何在ios 5中实现RETWEET?

ios - MFMailComposeViewController 困惑

ios - 如何使用 OpenCV 解决 iOS 链接错误

objective-c - Simperium,获取 AuthManager 的委托(delegate)通知

objective-c - 开源钢琴键盘 ios