2012-04-18 140 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