문제

Httphandler에서 지정된 크기와 색상의 GIF 이미지를 동적으로 생성하려고합니다. 어떤 이유로, 이미지는 내가 예상했던 단색이 아닌 디더링 된 색상 패턴으로 생성됩니다. Solidbrush 만들다. 다음 코드는 문제를 노출시키는 것이 가장 간단합니다.

private void GenerateSquareImage(String filename, String color, Int32 width)
{
    Bitmap img = new Bitmap(width, width);
    Graphics g = Graphics.FromImage(img);
    SolidBrush brush = new SolidBrush(ColorTranslator.FromHtml("#" + color));

    g.FillRectangle(brush, 0, 0, width, width);

    img.Save(filename, System.Drawing.Imaging.ImageFormat.Gif);
    img.Dispose();

    brush.Dispose();
    g.Dispose();
}

다음은 색상 매개 변수에서 "415976"을 통과 할 때 얻은 결과의 샘플입니다.

Imageshack http://img148.imageshack.us/img148/8936/colorcb5.png

(왼쪽의 블록은 배경색이 #415976으로 설정된 HTML 스팬입니다. 오른쪽의 블록은 내 그래픽으로 디더링 된 색상을 볼 수 있습니다.)

이 코드를 사용하는 경우 결과는 동일합니다.

g.Clear(ColorTranslator.FromHtml("#" + color));

위의 방법에서 g.fillRectangle 호출 대신.

업데이트: 기본적으로 GDI+는 gif를 저장합니다 웹 안전 팔레트 비트 맵으로 프로그래밍 방식으로 변경되는 경우. 이것이 내 안전하지 않은 팔레트 색상을 디터링하게하는 원인입니다. 아래의 Marco의 게시물에서 참조 된 코드를 수정할 수있었습니다.http://msdn.microsoft.com/en-us/library/aa479306.aspx) 새로 생성 된 이미지에서 팔레트를 수정하여 색상이 존중되도록합니다.

도움이 되었습니까?

해결책

GIF 파일은 내가 아는 한 256 개의 색상으로 제한되므로 디더링에 의지합니다. PNG는 아마도 필요한 형식 일 것입니다.

또는 볼 수 있습니다 여기 복잡한 Quantizer를 사용하여 사용자 정의 팔레트를 구축하는 솔루션의 경우 (링크의 코드에 대한 책임을지지 않습니다. 절대 시도하지 마십시오).

이것 Microsoft의 다른 링크 문제에 대한 심층 분석이 있습니다.

도움이 되었기를 바랍니다.

다른 팁

IIRC GIF는 .NET의 특정 팔레트로 제한됩니다. 해결 방법이 있지만 내 이해보다 높았습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top