关闭

图片失真问题的解决方式

1541人阅读 评论(0) 收藏 举报

    我们假设要在截图中的举行图片展示区显示图片,由于原图片的宽高比例与图片显示窗口的宽高比例不一定相同,所以,直接将图片扔进去会改变图片的宽高比例,展示效果不好。

    这时你可能想到设置UIImageView的属性 _imageView.contentMode = UIViewContentModeCenter;  设置该属性后,我们会发现图片的宽高比例确实正确了,但是窗口中只显示了图片的一部分,这说明图片整体尺寸没有压缩,按照原图进行显示了。怎样才能达到既缩小图片又不改变原来的宽高比例呢?

    方法一:将图片按照原来的宽高比例压缩到与窗口合适的大小,然后在设置了_imageView.contentMode = UIViewContentModeCenter;  这个属性的UIImageView中展示压缩后的图片。

  1. //压缩图片  
  2. - (UIImage *)image:(UIImage*)image scaledToSize:(CGSize)newSize  
  3. {  
  4.     // Create a graphics image context  
  5.     UIGraphicsBeginImageContext(newSize);  
  6.     // Tell the old image to draw in this new context, with the desired  
  7.     // new size  
  8.     [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];  
  9.     // Get the new image from the context  
  10.     UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();  
  11.     // End the context  
  12.     UIGraphicsEndImageContext();  
  13.     // Return the new image.  
  14.     return newImage;  
  15. }  
上面方法的参数newSize是和图片显示窗口差不多大的,结果出现了原图清晰,但压缩后图片不清晰的情况。


    方法二:按照窗口宽高比例,将原图横向或者纵向裁剪掉多余的部分,然后不设置UIImageView的contentMode属性,将裁剪后的图片送进去,使其自动适应窗口。

  1. //裁剪图片  
  2. - (UIImage *)cutImage:(UIImage*)image  
  3. {  
  4.     //压缩图片  
  5.     CGSize newSize;  
  6.     CGImageRef imageRef = nil;  
  7.       
  8.     if ((image.size.width / image.size.height) < (_headerView.bgImgView.size.width / _headerView.bgImgView.size.height)) {  
  9.         newSize.width = image.size.width;  
  10.         newSize.height = image.size.width * _headerView.bgImgView.size.height / _headerView.bgImgView.size.width;  
  11.           
  12.         imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(0, fabs(image.size.height - newSize.height) / 2, newSize.width, newSize.height));  
  13.           
  14.     } else {  
  15.         newSize.height = image.size.height;  
  16.         newSize.width = image.size.height * _headerView.bgImgView.size.width / _headerView.bgImgView.size.height;  
  17.           
  18.         imageRef = CGImageCreateWithImageInRect([image CGImage], CGRectMake(fabs(image.size.width - newSize.width) / 20, newSize.width, newSize.height));  
  19.   
  20.     }  
  21.   
  22.     return [UIImage imageWithCGImage:imageRef];  
  23. }  
结果表明方法二效果更好。
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

ImageView的几种对图片的缩放处理 解决imageview放大图片后失真问题解决办法

我的解决办法: 1 首先设置android:layout_width=”wrap_content”和android:layout_height=”wrap_content”,否则你按比例缩放后的...
  • tiramisu_ljh
  • tiramisu_ljh
  • 2017-04-01 13:57
  • 2269

上传压缩后的图片并且保持100k不失真的方法

压缩100k图片不失真的方法;先获取图片的原始长度和宽度;然后计算图片的缩放值;最后等比例压缩;
  • android_drawing
  • android_drawing
  • 2015-04-11 16:07
  • 3781

cocos2d-x解决图片模糊问题

有时候不知道什么原因,创建的tupian
  • tyxkzzf
  • tyxkzzf
  • 2014-09-27 14:01
  • 3422

Android TV开发遇到的图片失真问题以及对应的解决办法

现在的Android机顶盒为了兼容电视屏幕,一般都会设置一个修改分辨率的功能。然而这个修改分辨率很多时候其实不是修改系统实际分辨率,而是一个输出分辨率。   因为在Android系统中,图像从生成到...
  • w815878564
  • w815878564
  • 2016-10-26 18:04
  • 963

Android 拍照并显示在ImageView中(解决图片压缩失真的问题)

拍照后图片放ImageView中,ImageView中显示的是经过Android系统处理过的缩略图,很小。下面,我们来看看为什么拍照后从data里拿到的图片会小的呢?   在Activity中通过如...
  • wtyvhreal
  • wtyvhreal
  • 2015-11-02 21:35
  • 3062

解决使用CImage类的Draw函数在显示图片时引起的图像失真问题

在VS2008以后,添加了一个很方便的可用于图像处理的CImage类。之前在项目中使用该类时,发现在某些情况下,图像缩小或放大显示后,出现明显的图像失真现象,以下为解决方案。 在调用Draw函数...
  • shishuiliu00
  • shishuiliu00
  • 2016-06-21 15:30
  • 1651

android 代码设置PNG图片失真问题

今天测试那边反馈一个问题,我们的游戏背景的渐变处有明显的光晕失真:先上图 用蓝线圈出来的地方渐变效果有明显的失真现象 我的代码是: gameBg.setBackgroundDrawable(...
  • xujixian6272002
  • xujixian6272002
  • 2013-07-03 14:46
  • 1216

ImageList的图片失真问题

我把大家对于ImageList的问题归纳了一下,主要都是关于: 1.ImageList里面的图片的颜色 2.ImageList里面的图片的大小 /********* 1)ImageLis...
  • lin_xi1990
  • lin_xi1990
  • 2013-09-18 10:39
  • 799

Retinex实验效果图和图片格式转化的失真问题

实现为了测试为什么两个不同位置的相同的工程处理图片却感觉处理后的图片效果不一样(以确定两个工程是不是有所差别),第一章图为原图,但是感觉也是有点怪怪的,因为图片是从一个地方拷贝到另一个工程上的,应该是...
  • u013035197
  • u013035197
  • 2016-07-08 10:38
  • 315

关于从网络上获取图片后自适应cell并且不失真的问题

鉴于这个互联网时代的资本寒冬,博主很不幸的遭遇了这个地雷,无奈的选择了一个每天要七点起床挤地铁一个半小时的公司,更无奈的是有一群老程序猿们,之所以说老倒不是他们年纪有多大(虽然大部分比我大十岁),而是...
  • jp940110jpjp
  • jp940110jpjp
  • 2015-11-24 14:23
  • 795
    个人资料
    • 访问:144104次
    • 积分:3121
    • 等级:
    • 排名:第12848名
    • 原创:166篇
    • 转载:58篇
    • 译文:0篇
    • 评论:3条
    最新评论