【问题标题】:Unexpected image color change using Core Graphics使用 Core Graphics 的意外图像颜色变化
【发布时间】:2018-04-06 02:08:48
【问题描述】:

遵循一般图像创建和操作代码建议 Add transparent space around a UIImage 我遇到了颜色偏离预期值的问题。

(请注意,虽然我已经简化了此处包含的代码,使得按钮现在与图像大小相同,但我在按钮比图像宽的情况下使用图像处理代码,并将其放置按钮区域右端的较小图像。我在那个位置没有问题,但注意到颜色问题,所以在创建这个示例时,我将按钮缩小到与图像相同的大小,但保留了显然是的代码造成不希望的颜色变化。)

要重现该问题,请从使用 Metal 的 ObjC 中的标准 Xcode 游戏模板项目开始。以下所有更改均在 GameViewController.m 中进行,主要针对方法 viewDidLoad。

首先注释掉 viewDidLoad 中处理渲染器的最后 3 行。这会从显示中移除旋转的立方体,使我正在详细描述的情况更容易看到。

然后在其位置添加以下代码...

UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
button.frame = CGRectMake(350.0, 100.0, 90.0, 50.0);
[_view addSubview:button];

UIGraphicsBeginImageContextWithOptions(CGSizeMake(90.0, 50.0), NO, 1.0);
CGContextRef context = UIGraphicsGetCurrentContext();
UIGraphicsPushContext(context);

UIImage *oldImage = [UIImage imageNamed:@"SquiggleBox_90x50_01.png"];
//UIImage *oldImage = [UIImage imageNamed:@"SquiggleBox_90x50_01.jpg"];
[oldImage drawAtPoint:CGPointMake(0.0, 0.0)];

UIGraphicsPopContext();
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[button setImage:newImage forState:UIControlStateNormal];

(我在下面提供了两个图像文件。第一个是 .PNG,第二个是 .JPG,都是 90x50 像素。两者都在金色轮廓(图像矩形边框上的细金线。PNG 文件在没有金色的地方具有透明度,JPG 使用白色填充。PNG 是使用 Adob​​e Illustrator 创建的,JPG 是通过 Photoshop 转换的. 使用下面给出的名称保存它们,您可以继续使用代码。)

最后,将以下两个图片文件添加到项目中,以便代码可以引用其中一个。

SquiggleBox_90x50.png
SquiggleBox_90x50.jpg

使用 PNG 时,金色曲线和轮廓变为蓝色。 使用 JPEG 时,整个按钮为纯蓝色。

【问题讨论】:

  • 我不相信jpg 支持透明度,所以它正在为整个图像着色。使用png,它知道什么是透明的,什么不是,所以它更适合为内容着色?
  • 请上传图片。您可以通过单击输入区域标题中的小图像符号或在编辑时键入 Ctrl-G 来完成此操作。
  • 感谢 LGP 的建议。我最初放置了 PNG,但我现在添加了 JPG。现在我看到您可以保存该图像,按照我在文本中指示的方式命名,然后继续执行代码。

标签: ios objective-c core-graphics


【解决方案1】:

Kevin Enax 掌握了重要的线索……着色。解决方案是在代码中添加一行,紧跟在定义 newImage 的行之后,在结束上下文之前,放置

newImage = [newImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

这可以防止着色,并且原始颜色会根据需要通过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2015-05-07
    • 2014-02-24
    • 1970-01-01
    • 2020-03-20
    相关资源
    最近更新 更多