2017-04-05 53 views
0

这里是我的测试代码:双图像大小时转换一个的UIImage到CIImage

- (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}} 

我找不到为什么图像尺寸的一倍测试1。我该如何解决它?

+0

由于规模(视网膜)?同样在'[UIImage imageNamed:@“test.jpg”];',它是否总是返回尺寸为400 * 400的图像?你使用@ 2x/Assets? – Larme

+0

我没有使用@ 2x。我只需右键单击 - >将文件添加到我的项目 – hoangdado

回答

1

UIImage大小是在点。 CIImage范围以像素为单位。当您为第一次测试捕获UIView时,您在视网膜屏幕上这样做,所以1点== 2x2像素。当您从文件加载第二张图片时,您正在加载非视网膜资源(test.jpg vs [email protected]),因此1点== 1x1像素。

没有什么可以修复的 - 当您将视图捕捉为图像时,它的大小并不是双倍,这是您捕捉视图的大小(以像素为单位)。

如果您希望两个测试最终以相同比例结束,请提供资产的视网膜版本。

相关问题