ios - CGAffineTransformmakeScale 图像质量问题

标签 ios objective-c cgaffinetransform cgaffinetransformscale

我有一个正在通过 UIPinchGesture 缩小的 View 。该 View 的 subview 是带有关联图像的 UIImageView。问题是当缩小到原来较大尺寸的 1/4 左右时,缩小似乎会显着影响图像质量。

我很好奇是否有一种方法可以解决这个问题而无需在按比例缩小时以更改后的尺寸重新绘制图像。

最佳答案

我会说不。

要在所有状态下提高图像可见质量(无需重新缩放任何内容),最好的选择是将原始图像缩放到屏幕上最大和最小尺寸之间的一半大小。这将导致 GPU 进行的图像缩放最少。

除此之外,每当您通过以下方式对 View 应用变换时,只需重新缩放图像:

+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
    //UIGraphicsBeginImageContext(newSize);
    // In next line, pass 0.0 to use the current device's pixel scaling factor (and thus account for Retina resolution).
    // Pass 1.0 to force exact pixel size.
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();
    return newImage;
}

您可能需要担心宽高比,但这完全是另一个问题。

关于ios - CGAffineTransformmakeScale 图像质量问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21335087/

相关文章:

objective-c - 核心数据: How to merge inserts/updates/deletes between two NSManagedObjectContext's while maintaining the merge as an undoable step?

ios - 迪尔德 : Symbol not found: ___NSDictionary0__ when using google ServiceGenerator binary with discovery docs in XCode 7 & iOS target 9. 0

ios - 限制版本 iOS - 没有最低版本

ios - CGAffineTransform 不在动画 block 内设置动画

ios - 旋转 UIView 导致它改变位置

ios - 如何区分通过我的应用程序保存的事件和使用 EventKit 使用日历应用程序保存的事件?

ios - 需要帮助了解 IOS 核心数据中的 transient 属性

c# - Monotouch CGAffineTransform,在同一 View 上同时为多个仿射变换设置动画

ios - prepareForSegue 在 vi​​ewDidLoad 加载所有 IBOutlets 之前触发 didSet

ios - 是否可以降低状态栏的高度?