簡體   English   中英

將UIImage轉換為CIImage以裁剪為CGRect。 AVFoundation

[英]Convert a UIImage to a CIImage to crop to a CGRect. AVFoundation

所以我有一個要裁剪的UIImage。 我查看並找到CIImage的imageByCroppingToRect方法。 因此,我將數據轉換為CIImage而不是UIImage,使用指定的方法對其進行裁剪,然后將結果CIImage轉換為UIImage,然后在UIImageView中顯示。

我的代碼是

 NSData *data = [[NSData alloc]initWithData:[def objectForKey:@"imageData"]];
//UIImage *normalImage = [[UIImage alloc]initWithData:data];
CIImage *originalImage = [CIImage imageWithData:data];
[originalImage imageByCroppingToRect:CGRectMake(10, 72, 300, 300)];

self.imageView.image = [UIImage imageWithCIImage:originalImage];

問題是圖像旋轉了90度,但不確定是否被裁剪。 該圖像是使用設備的相機捕獲的。 我使用AVFoundation訪問攝像機。 我的會話預設為AVCaptureSessionPresetPhoto 我認為這就是為什么我得到變焦。

CGRect rect = CGRectMake(10, 72, 300, 300);
CGImageRef imref = CGImageCreateWithImageInRect([yourOriginalImage CGImage], rect);
UIImage *newSubImage = [UIImage imageWithCGImage:imref];

嘗試這個。 可能會幫助你。

編輯:

首先修復您的圖像方向:refs: https : //github.com/j3r3miah/mapmatic-ios/blob/master/Mapmatic/UIImage+FixOrientation.m

然后使用上面的代碼將圖像裁剪為“指定矩形”。

並不是您問題的答案,而是您問題的答案

https://github.com/mbcharbonneau/UIImage-Categories

特別是這個文件: https : //github.com/mbcharbonneau/UIImage-Categories/blob/master/UIImage%2BResize.m

- (UIImage *)croppedImage:(CGRect)bounds {
    CGFloat scale = MAX(self.scale, 1.0f);
    CGRect scaledBounds = CGRectMake(bounds.origin.x * scale, bounds.origin.y * scale, bounds.size.width * scale, bounds.size.height * scale);
    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], scaledBounds);
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef scale:self.scale orientation:UIImageOrientationUp];
    CGImageRelease(imageRef);
    return croppedImage;
}

您將找到裁剪圖像所需的一切

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM