将UIImage(包含PNG图像)转换为NSData,alpha = 0的像素将丢失其RGB值

时间:2013-03-28 18:10:15

标签: c# xamarin.ios uiimage pixel alpha

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

1 个答案:

答案 0 :(得分:1)

  

为什么?

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

  

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

遗憾的是,不可能进行相反的操作。您需要保留原始图像/值。