所以我有一个包含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而不是原始值!为什么是这样?
以下是显示此内容的示例的保管箱链接。运行此项目,图像将获得一些像素的alpha清零。 RGB值将保持不变。您可以取消注释print语句以查看此内容。然后,如果你点击屏幕(参见TouchesBegan函数)它将UIImage转换为NSData,然后再转换回UIImage。然后它再次将所有像素数据打印到屏幕上。在这里,您将看到RGBA数据的全部0,0,0,0,显示Alpha被归零的任何实例都没有保留RGB值。为什么是这样?
https://www.dropbox.com/s/21d5k1yex475u2j/TestAlpha_WorkaroundIssue.zip
答案 0 :(得分:1)
为什么?
这听起来像是对图像数据进行了预乘alpha的转换。 杀死每个RGB值(通过将它们乘以0)。
无论如何我可以保留它们吗?
遗憾的是,不可能进行相反的操作。您需要保留原始图像/值。