gpt4 book ai didi

iphone - 尝试动态为透明 UIImage 着色,但结果始终模糊。我究竟做错了什么?

转载 作者:行者123 更新时间:2023-12-03 18:57:56 27 4
gpt4 key购买 nike

我的 iPhone 应用程序具有自定义 UITableViewCell,每个都有一个图标。在正常的单元格状态下,这些图标是黑色的,背景透明。我不想将第二组反转图标与应用程序捆绑在一起以实现突出显示状态(透明背景上的白色),而是希望在用户触摸相应的表格单元格时使用 Core Graphics 即时反转这些图标。

我找到了一些与用颜色覆盖 UIImage 或重新着色 UIImage 相关的其他答案,但所有这些技术都会产生模糊的结果我(见下文)。我尝试过各种 CGBlendMode ,以及手动计算更准确的蒙版(也许我做得不正确),但图标边缘周围的半透明像素似乎是它们的不透明度被破坏或基本上被丢弃 - 呈现出不稳定/模糊的外观。我对自己做错的事情感到不知所措。

这也不是真正改变我的所有图标的选项,使它们只是纯黑/白,没有透明度 - 我需要将图标放在透明背景上,以便它们也可以覆盖在其他 UI 元素之上.

我用来反转图标的代码(由 Chadwick Wood 提供)(我在每个原始图标上调用此方法,并传入 [UIColor WhiteColor] 作为第二个图标参数)和示例输出(在带有 iOS 4.1 的 iPhone 4 上)如下(忽略突出显示图像上的蓝色背景 - 它是所选表格单元格的突出显示背景)。

非常感谢任何帮助。

输入和输出示例:

Icon before & after programmatic recoloring.

@implementation UIImage(FFExtensions)

+ (UIImage *)imageNamed:(NSString *)name withColor:(UIColor *)color {

// load the image
UIImage *img = [UIImage imageNamed:name];

// begin a new image context, to draw our colored image onto
UIGraphicsBeginImageContext(img.size);

// get a reference to that context we created
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);

// set the fill color
[color setFill];

// translate/flip the graphics context (for transforming from CG* coords to UI* coords
CGContextTranslateCTM(context, 0, img.size.height);
CGContextScaleCTM(context, 1.0, -1.0);

// set the blend mode to color burn, and the original image
CGContextSetBlendMode(context, kCGBlendModeMultiply);
CGRect rect = CGRectMake(0, 0, img.size.width, img.size.height);
//CGContextDrawImage(context, rect, img.CGImage);

// set a mask that matches the shape of the image, then draw (color burn) a colored rectangle
CGContextClipToMask(context, rect, img.CGImage);
CGContextAddRect(context, rect);
CGContextDrawPath(context,kCGPathFill);


// generate a new UIImage from the graphics context we drew onto
UIImage *coloredImg = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

//return the color-burned image
return coloredImg;
}

@end

最佳答案

由于 Peter 和 Steven 观察到输出图像的分辨率似乎低于输入图像,我意识到在创建图像上下文时我没有考虑屏幕的比例因子。

更改线路:

UIGraphicsBeginImageContext(img.size);

UIGraphicsBeginImageContextWithOptions(img.size, NO, [UIScreen mainScreen].scale);

解决了问题。

关于iphone - 尝试动态为透明 UIImage 着色,但结果始终模糊。我究竟做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4138378/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com