我有一個尺寸爲(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]);
}
嘗試在您的計算中使用floor(),以避免部分像素對齊,特別是對於原點。 – Avi
沒有floor()刪除小數點並且在裁剪區域中出現更多錯誤。 – batuman