簡體   English   中英

UIImage用於UIImageView時扭曲

[英]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.

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