【发布时间】: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 是使用 Adobe Illustrator 创建的,JPG 是通过 Photoshop 转换的. 使用下面给出的名称保存它们,您可以继续使用代码。)
最后,将以下两个图片文件添加到项目中,以便代码可以引用其中一个。
SquiggleBox_90x50.png
SquiggleBox_90x50.jpg
使用 PNG 时,金色曲线和轮廓变为蓝色。 使用 JPEG 时,整个按钮为纯蓝色。
【问题讨论】:
-
我不相信
jpg支持透明度,所以它正在为整个图像着色。使用png,它知道什么是透明的,什么不是,所以它更适合为内容着色? -
请上传图片。您可以通过单击输入区域标题中的小图像符号或在编辑时键入 Ctrl-G 来完成此操作。
-
感谢 LGP 的建议。我最初放置了 PNG,但我现在添加了 JPG。现在我看到您可以保存该图像,按照我在文本中指示的方式命名,然后继续执行代码。
标签: ios objective-c core-graphics