"색상 유형"으로 팔레트를 사용하는 PNG 렌더링에 문제가 있습니다. 다음은 문제를 재현 할 수있는 간단한 코드입니다.WriteableBitmap이 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를 "Color Type"으로 사용하는 PNG를 사용하여 동일한 테스트를 수행하면 모든 것이 정상적으로 작동합니다.
나는 Codeplex 포럼을 살펴본 결과 관련 게시물을 보지 못했습니다. 내가 그것을 렌더링하는 방식과 관련이있을지라도 문제로보고했다. 잘못된 렌더링을 일으킬 수있는 WriteableBitmap을 사용하는 방식에 실수가 있습니까?
UPDATE
이 논의 https://writeablebitmapex.codeplex.com/discussions/274445 에 따르면, 문제는 바이트의 예상치 못한 순서와 관련이 있습니다. 이 의견은 1 년 반 전의 것이므로 어딘가에 적절한 수정이 있어야한다고 생각합니다.
잘못 렌더링 된 이미지는 위의 코드에 있습니다.
이 코드는 동일한 코드를 사용하여 올바르게 렌더링됩니다. http://www.queness.com/resources/images/png/apple_ex.png
두 이미지의 유일한 차이점은 "색상 유형"속성입니다. 실패한 것은 "Palette"로 설정되고 올바르게 렌더링 된 것은 "RGB Alpha"로 설정됩니다.
감사합니다. 카를로스.
: 당신은 당신이 그것으로 디코딩 할 형식을 지정할 수 있도록
당신은 FromStream를 생략하고 BitmapDecoder를 사용하여이 문제를 우회 할 수있다. com/discussions/274445 –
WriteableBitmapExtensions.BlendMode.None을 전달하고 정렬하는지 확인해보십시오. 기본값은 다를 수 있습니다. –
사용한 두 이미지를 게시 할 수 있습니까? –