图像在 UIImageView 中显示模糊
Posted
技术标签:
【中文标题】图像在 UIImageView 中显示模糊【英文标题】:Image shows up blurred in UIImageView 【发布时间】:2012-04-18 22:00:32 【问题描述】:我正在创建一个应用程序,用户可以在其中将他们的日程表加载到应用程序中,然后显示。
当允许在加载前编辑图像时,它会完美显示:
一旦用户“选择”了图像,它就会显示在 UIImageView
模糊中:
这里稍微放大:
我知道图像分辨率还可以,因为图像可以预先完美显示。 我怎样才能阻止它变得模糊?
我正在使用在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;
谢谢!
【问题讨论】:
当用户选择图片时会发生什么(代码)?您是重新设置图像视图的图像还是更改图像视图的某些属性? 代码已添加!不过我觉得没有问题 您是否尝试过使用 PDF 查看器而不是 imageView。问题是当您缩放时,imageview 不会以更高的分辨率重新绘制自己。 您可能会遇到与视网膜和非视网膜缩放相关的问题。您是否在视网膜环境中看到这些问题,如果您切换到非视网膜,您还会看到它们吗? 【参考方案1】:ios 在缩放视图时不会重绘视图,它只是向上或向下缩放视图。底层实现基本上是一个带纹理的 OpenGL 多边形,这就是缩放如此之快的原因。以更高的分辨率重新生成纹理很慢,因此 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;
【讨论】:
我直接把这个复制到我的app里了,好像没有什么区别。如何告诉 iOS 重绘图像? 其实我错过了使用图片选择器中的editedImage的部分。您是否检查了保存在 imagePath 的文件并确认它实际上具有原始的完整分辨率并且没有模糊?也许问题根本不在于缩放。 或者,换一种说法,尝试记录editedImage的宽度/高度——它至少是1280像素宽吗?因为如果不是,则无法将其缩放 400% ( 4 * 320) 而不会变得模糊。 嘿,好点。即使在缩放之前,图像也很模糊。如何检查编辑后的图像是否具有原始图像的所有分辨率? 您可以将editedImage.size.width与UIImagePickerControllerOriginalImage返回的图像的size.width进行比较,尽管我在***上看到一些帖子表明UIImagePickerControllerOriginalImage并不总是返回原始图像要么。以上是关于图像在 UIImageView 中显示模糊的主要内容,如果未能解决你的问题,请参考以下文章
在具有透明度的 UITableView 单元格中更新 UIImageView
在 UITableView iPhone 中显示 MySQL 数据库中的图像