我在渲染使用调色板作为“颜色类型”的 PNG 时遇到问题。以下是一些重现该问题的简单代码:
private async System.Threading.Tasks.Task Fetch()
{
HttpClient httpClient = new HttpClient();
Uri uri = new Uri("http://static.splashnology.com/articles/How-to-Optimize-PNG-and-JPEG-without-Quality-Loss/PNG-Palette.png");
HttpResponseMessage response = await httpClient.GetAsync(uri);
if (response.StatusCode == HttpStatusCode.Ok)
{
try
{
var content = await response.Content.ReadAsBufferAsync();
WriteableBitmap image = await BitmapFactory.New(1, 1).FromStream(content.AsStream());
Rect destination = new Rect(0, 0, image.PixelWidth, image.PixelHeight);
Rect source = new Rect(0, 0, image.PixelWidth, image.PixelHeight);
WriteableBitmap canvas = new WriteableBitmap(image.PixelWidth, image.PixelHeight);
canvas.Blit(destination, image, source);
RadarImage.Source = canvas;
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine(e.Message);
System.Diagnostics.Debug.WriteLine(e.StackTrace);
}
}
}
如果我使用 Windows Phone 8.1 运行该代码,图像会使用错误的颜色显示。如果我使用使用 RGB 作为“颜色类型”的 PNG 进行相同的测试,那么一切正常。
我查看了 Codeplex 论坛,但没有看到任何与此相关的帖子。我已将其报告为一个问题,尽管它可能与我渲染它的方式有关。我使用 WriteableBitmap 的方式是否有任何错误可能导致错误的渲染?
更新
根据此讨论 https://writeablebitmapex.codeplex.com/discussions/274445 ,该问题与意外的字节顺序有关。这些评论来自一年半前,所以我认为应该在某个地方进行适当的修复......
错误渲染的图像在上面的代码中。
这个,使用相同的代码,正确呈现。 http://www.queness.com/resources/images/png/apple_ex.png
这两个图像之间的唯一区别是“颜色类型”属性。失败的设置为“调色板”,正确渲染的设置为“RGB Alpha”。
谢谢!卡洛斯。