1

所以我有一个包含 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

4

1 回答 1

1

这是为什么?

这听起来像是在图像数据上完成了对预乘 alpha 的转换。这杀死了每个 RGB 值(通过将它们乘以 0)。

无论如何我可以保留它们吗?

可悲的是,无法进行反向操作。您需要保留原始图像/值。

于 2013-03-28T20:28:53.017 回答