[英]UIImage distorted when using it for UIImageView
我拍了一張照片,然后用這張照片初始化UIImageView對象。 唯一的問題是,當我拍攝照片時,正在使用完整的iPhone屏幕(人像)拍攝照片。
以此照片初始化的UIImageView僅設置為占據iPhone屏幕的前50%。 因此,您可以想象圖像看起來失真。
通過使用以下代碼,我能夠使其看起來更好:
UIImageView *halfView = [[UIImageView alloc]initWithImage:image];
[self.view addSubview:halfView];
halfView.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.frame.size.height/2);
halfView.contentMode = UIViewContentModeScaleAspectFill;
唯一的問題是,最終的UIImageView稱為“ halfView”仍然略有變形。
我覺得這不可能解決,因為原始照片是用完整的iPhone屏幕拍攝的,永遠無法完美縮放以適應僅占據iPhone屏幕前50%的UIImageView。
我基本上是想復制前台應用程序。 當您在他們的應用中拍攝原始圖像時,外觀如下:
這是拍照時我的應用程序的屏幕外觀:
然后,在您拍照后,我的應用程序的屏幕將更改為看起來像“前端”屏幕,並拍攝您剛拍攝的照片,並將其放在上半部分並嘗試縮放。
我希望這是有道理的。 我知道這是一個很長的問題,但是我只是想讓用戶在拍照時使用全屏,然后將其縮放到一半屏幕。
我要解決所有這些錯誤嗎? 我是否以為最初將其捕獲為“全屏”圖像時可以將圖像適當地縮放到屏幕的一半而感到瘋狂?
謝謝您的幫助。
為了爭辯起見,假設您捕獲的圖像大小為640x1136(是iPhone 5屏幕的兩倍),並且您試圖將其顯示在大小為320x284(是iPhone 5屏幕的一半)的UIImageView
。 從這些尺寸中已經可以看到,捕獲的圖像的寬度小於其高度,而UIImageView
的寬度大於其高度-比例不同。
因此,縮放捕獲的圖像以適合UIImageView
的寬度(按0.5縮放)意味着捕獲的圖像將具有320x568的大小-其高度大於UIImageView
的高度。 縮放捕獲的圖像以適合UIImageView
的高度(按0.25縮放)意味着捕獲的圖像的大小為160x284-其寬度小於UIImageView
的寬度。
圖片無法完全按照您想要的比例縮放。 但是,您可以使用UIViewContentModeScaleAspectFill
填充整個UIImageView
但會丟失一些圖像(圖像的高度太大而無法容納)。 您還可以選擇使用UIViewContentModeScaleAspectFit
,它將顯示整個圖像,但在側面會留一些空間(圖像的寬度太小)。
您還有另一個選擇是首先按照UIImageView
的比例實際捕獲圖像,但這意味着您將無法捕獲全屏圖像。
嘗試使用此功能,將您的UIImage
以及新的size
傳遞給該函數,依次返回您指定大小的UIImage
。
- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
我想這就是你想要的。 希望這可以幫助。
您提到圖像占據了屏幕的整個尺寸。 如果要顯示占據一半屏幕的UIImageView,則需要添加此代碼以裁剪框架
halfView.clipToBounds = YES;
盡管將imageview的大小設為屏幕的一半,但如果使用AspectFit屬性將其原始大小放大,則實際圖像將顯示在imageview的邊界之外。 clipToBounds將解決此問題。
我希望這是您要尋找的。 謝謝,吉姆
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.