【问题标题】:Convert UIImage (containing PNG Image) to NSData, pixels whose alpha = 0 lose their RGB value将 UIImage(包含 PNG 图像)转换为 NSData,alpha = 0 的像素将失去其 RGB 值
【发布时间】:2013-03-19 07:46:15
【问题描述】:

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

【问题讨论】:

    标签: c# xamarin.ios uiimage pixel alpha


    【解决方案1】:

    这是为什么呢?

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2017-03-30
      • 2013-05-20
      • 1970-01-01
      • 2021-12-17
      • 2011-09-22
      相关资源
      最近更新 更多