3

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

我尝试更改属性“使用边缘抗锯齿渲染”无济于事。

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

它似乎对图像的质量非常混乱,然后显示它。我试图在这里发布图片,但 StackOverflow 拒绝了我的这一特权。所以这是一个链接到正在发生的事情。

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

这张图片中的太阳就是我所说的问题。有任何想法吗?

4

4 回答 4

6

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

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();
于 2013-04-05T20:23:05.913 回答
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,具有您指定的特定大小。

于 2013-04-05T20:34:34.610 回答
0

你的图像有多大,imageView 的大小是多少?不要依赖 UIImageView 为你缩小它。您可能需要手动调整它的大小。这也会更节省内存。

于 2013-04-05T20:21:59.730 回答
0

我使用这样的类别: >>>github链接<<<

进行图像大小调整。

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

另请记住,如果要旋转图像以避免锯齿,则需要在图像边缘设置透明边框。

于 2013-04-05T20:57:28.587 回答