像素化的iphone UIImageView

时间:2013-04-05 20:17:20

标签: iphone ios uiimageview

我一直遇到使用UIImageView类渲染图像的问题。像素化似乎主要发生在我试图展示的图像的边缘。

我尝试更改属性'使用边缘抗锯齿渲染'无效。

图像文件包含的图像大于屏幕上显示的图像。

这似乎是对图像质量的质疑,然后显示它。我试图在这里发布图片,但StackOverflow正在否认我的特权。所以这里有一个链接到正在发生的事情。

http://i.imgur.com/QpUOTOF.png

这张照片中的太阳是我所说的问题。有什么想法吗?

4 个答案:

答案 0 :(得分:5)

动态图像调整大小快速且质量低。对于捆绑的图像,额外的捆绑空间值得包括缩小版本。对于下载的图像,您可以在设置图像属性之前通过将Core Graphics调整为新的UIImage来获得更好的效果。

CGSize newSize = CGSizeMake(newWidth, newHeight);

UIGraphicsBeginImageContextWithOptions(newSize, // context size
                                       NO,      // opaque?
                                       0);      // image scale. 0 means "device screen scale"
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
[bigImage drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

答案 1 :(得分:3)

使用以下方法,通过图像

获取特定的宽度
+ (UIImage*)resizeImage:(UIImage*)image withWidth:(int)width withHeight:(int)height
{
    CGSize newSize = CGSizeMake(width, height);
    float widthRatio = newSize.width/image.size.width;
    float heightRatio = newSize.height/image.size.height;

    if(widthRatio > heightRatio)
    {
        newSize=CGSizeMake(image.size.width*heightRatio,image.size.height*heightRatio);
    }
    else
    {
        newSize=CGSizeMake(image.size.width*widthRatio,image.size.height*widthRatio);
    }


    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;
}

此方法返回 NewImage ,具有您指定的特定大小。

答案 2 :(得分:0)

您的图片有多大,imageView的大小是多少?不要依赖UIImageView为您缩小它。您可能需要手动调整大小。这也可以提高内存效率。

答案 3 :(得分:0)

我使用以下类别: >>>github link <<<

进行图像大小调整。

这也为圆角等提供了一些其他不错的功能。

另请注意,如果要旋转图像边缘,则需要在图像边缘使用透明边框以避免锯齿。