所以我有一个包含 PNG 图像的 UIImage 。如果我将该图像转换为 NSData,然后将其转换回 UIImage,图像很好,但是任何 alpha 为 0 的像素都会丢失它的 RGB 值。他们变成了零……这是为什么呢?无论如何我可以保留它们吗?
这是一个代码段:
// Declare a new NSData
NSData test = new NSData();
// Convert my Image (PNG) to NSData
test = MyImageView.Image.AsPNG();
// Convert the NSData back to UIImage
UIImage workAroundImage = UIImage.LoadFromData(test);
MyImageView.Image = workAroundImage;
现在,如果我要检查像素,我会发现任何 Alpha 值为 0 的像素的 RGB 值都为 0,0,0,而不是原始值!为什么是这样?
这是一个显示此示例的 Dropbox 链接。运行这个项目,图像会得到一些像素的 alpha 清零。RGB 值将保持不变。您可以取消注释打印语句以查看此内容。然后,如果您点击屏幕(请参阅 TouchesBegan 函数),它将 UIImage 转换为 NSData,然后返回 UIImage。然后它再次将所有像素数据打印到屏幕上。在这里,您将看到 RGBA 数据的所有 0,0,0,0,这表明任何将 Alpha 归零的实例都不会保留 RGB 值。为什么是这样?
https://www.dropbox.com/s/21d5k1yex475u2j/TestAlpha_WorkaroundIssue.zip