图像在UIImageView中显示模糊

时间:2012-04-18 22:00:32

标签: objective-c ios cocoa-touch image uiimageview

我正在创建一个应用程序,用户可以将其日程安排加载到应用程序中,然后显示它。

在加载前允许编辑图像时,它会完美显示:

Image 1

用户“选择”图片后,会显示在UIImageView模糊:

Image 2

这里稍微放大了一下:

Image 3

我知道图像分辨率还可以,因为图像预先显示完美。 如何阻止这种模糊?

我使用缩放UIImageView中的UIScrollView的基本方法。

这是我用来分配图像的代码。 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;
}
}

谢谢!

1 个答案:

答案 0 :(得分:2)

iOS在缩放视图时不会重绘视图,只是向上或向下缩放视图。底层实现基本上是一个纹理OpenGL多边形,这就是缩放速度如此之快的原因。在更高的res重新生成纹理很慢,因此除非您明确告诉它,否则iOS不会这样做。

您可以通过多种方式解决此问题。最简单的可能是将滚动视图的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;