2012-04-18 143 views
0

我正在創建一個應用程序,用戶可以將其日程安排加載到應用程序中,隨後顯示。圖片在UIImageView中顯示模糊

當圖像被允許加載前進行編輯,它完美地示出了:

Image 1

一旦用戶「選擇」的圖像,它顯示了在UIImageView模糊:

Image 2

這是稍微放大:

Image 3

我知道圖像分辨率是好的,因爲圖像顯示完美。 如何防止模糊不清?

我正在使用在UIScrollView中縮放UIImageView的基本方法。

這是我用來分配圖像的代碼。 zoomscroll是UIScrollView和myschedule是UIImageView

-(void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
[self dismissModalViewControllerAnimated:YES]; 

//Obtaining saving path 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *imagePath = [documentsDirectory stringByAppendingPathComponent:@"myschedule.png"]; 

//Extracting image from the picker and saving it 
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; 
if ([mediaType isEqualToString:@"public.image"]){ 
    UIImage *editedImage = [info objectForKey:UIImagePickerControllerEditedImage]; 
    NSData *webData = UIImagePNGRepresentation(editedImage); 
    [webData writeToFile:imagePath atomically:YES]; 

    myschedule.image = editedImage; 

    [zoomscroll addSubview:myschedule]; 
    zoomscroll.contentSize = CGSizeMake(myschedule.frame.size.width , myschedule.frame.size.height); 
    zoomscroll.minimumZoomScale = 1.0; 
    zoomscroll.maximumZoomScale = 4.0; 
} 
} 

謝謝!

+0

當用戶選擇圖像時會發生什麼(代碼)?你是重新設置圖像視圖的圖像還是改變圖像視圖的某些屬性? – 2012-04-18 22:07:53

+0

已添加代碼!我不認爲這有問題,雖然 – DGund 2012-04-18 22:08:25

+1

您是否嘗試過使用PDF查看器而不是imageView。問題是imageview在縮放時不會以更高的分辨率重繪自己。 – endy 2012-04-18 22:16:30

回答

2

iOS在放大視圖時不重繪視圖,它只是向上或向下縮放視圖。底層的實現基本上是一個帶紋理的OpenGL多邊形,這就是爲什麼縮放速度如此之快。在更高分辨率下重新生成紋理很慢,所以iOS不會這樣做,除非您明確告訴它。

有多種方法可以解決這個問題。最簡單的方法可能是將scrollview的contentSize設置爲圖像的實際大小,然後最初縮小,這樣用戶就不會縮小圖像的一個小版本達到400%(這會導致模糊),而是縮小從25%上升到100%。類似這樣的:

myschedule.image = editedImage; 
myschedule.frame = CGRectMake(0, 0, editedImage.size.width, editedImage.size.height); 

[zoomscroll addSubview:myschedule]; 
zoomscroll.contentSize = editedImage.size; 
zoomscroll.minimumZoomScale = 0.25; 
zoomscroll.maximumZoomScale = 1.0; 
zoomscroll.zoomScale = zoomscroll.minimumZoomScale; 
+0

我直接將其複製到我的應用程序中,似乎沒有任何區別。我如何告訴iOS重新繪製圖像? – DGund 2012-04-18 23:14:55

+1

其實我錯過了關於從圖像選擇器使用editedImage的部分。您是否檢查過保存在imagePath中的文件,並確認它實際上獲得了原始文件的完整分辨率並且沒有模糊?也許問題畢竟不是縮放。 – 2012-04-18 23:20:26

+0

或換句話說,請嘗試記錄editedImage的寬度/高度 - 是否至少是1280像素寬?因爲如果不是,那麼沒有辦法將它縮小400%(4 * 320),而不會模糊。 – 2012-04-18 23:24:37