2017-04-05 55 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像素。

沒有什麼可以修復的 - 當您將視圖捕捉爲圖像時,它的大小並不是雙倍,這是您捕捉視圖的大小(以像素爲單位)。

如果您希望兩個測試最終以相同比例結束,請提供資產的視網膜版本。

相關問題