2015-11-05 189 views
0

我有一個尺寸爲(0,0,414,471)的UIImageView。大小爲(0,0,1236,1242)的圖像在UIImageView中以UIViewContentModeScaleAspectFit模式顯示。所以圖像很好地顯示。然後我在圖像上畫出一個矩形(0,0,100,100),並且我喜歡裁剪它。儘管UIImageView上覆蓋了(100,100)的矩形,但在實際圖像尺寸上,(100,100)不包含UIImageView上顯示的尺寸。所以我製作xratio(實際寬度/顯示寬度)和yratio(實際高度/顯示高度),然後將矩形大小乘以矩形的所有x,y,寬度和高度。這種方法看起來像我可以儘可能地接近區域,如UIImageView所示。但仍有一些區域偏移和失真。在這種情況下裁剪的最佳方式是什麼? 我的代碼如下所示從UIImageView中裁剪圖像

- (void)saveCroppedImage:(UIImage *)image withcroppedRectangle:(CGRect)clippedRect 
{ 
    float xratio = image.size.width/displayWidth; 
    float yratio = image.size.height/displayHeight; 
    // Crop logic 
    clippedRect.origin.x *= xratio; 
    clippedRect.origin.y *= yratio; 
    clippedRect.size.width *= xratio; 
    clippedRect.size.height *= yratio; 

    CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], clippedRect); 
    UIImage * croppedImage = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 
    NSString *imageName [email protected]"Documents/"; 
    imageName = [imageName stringByAppendingString:[CurrentToddlerProfile getUserID]]; 
    imageName = [imageName stringByAppendingString:@".png"]; 
    NSString *pngPath = [NSHomeDirectory() stringByAppendingPathComponent:imageName]; 
    // Write image to PNG 
    [UIImagePNGRepresentation(croppedImage) writeToFile:pngPath atomically:YES]; 
    // Create file manager 
// NSFileManager *fileMgr = [NSFileManager defaultManager]; 
// NSError *error; 
// // Point to Document directory 
// NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 
// // Write out the contents of home directory to console 
// NSLog(@"Documents directory: %@", [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error]); 

} 
+0

嘗試在您的計算中使用floor(),以避免部分像素對齊,特別是對於原點。 – Avi

+0

沒有floor()刪除小數點並且在裁剪區域中出現更多錯誤。 – batuman

回答

1

您確定需要兩個比率嗎?如果你希望你的圖像具有合適的比例,你只能使用一個比例。

如果你需要填充一個矩形(即使UIImageView爲你做),然後首先計算x軸上的比例。使用此比率計算縮放高度(如果它小於需要覆蓋的高度),然後計算y軸上的比率。

最後,剛剛計算的比例是用來縮放圖像的比例。

+0

是的,你很好。對於寬度和高度,不需要兩個比例。但是對於x和y位置,我仍然需要兩個比率。 x,y位置乘法有一些位置偏移。 – batuman

+0

是的 - 沒錯。但是,那麼你的形象有預期的規模和比例,不是嗎? 順便說一句,我寧願使用圖像的中心作爲參考比左上角。 如果您使用不同比例來縮放您的偏移量和尺寸,我不確定它可以工作。 – Moose

+0

是的,謝謝,中心是一種左上角添加了固定間隔。我認爲這將是相同的。因爲我的矩形是方形的。 – batuman