WPF를 사용하여 비트 맵으로 텍스트를 렌더링하는 데 문제가 있습니다

StackOverflow https://stackoverflow.com/questions/1614397

  •  06-07-2019
  •  | 
  •  

문제

WPF를 사용하여 텍스트 및 WPF에서 JPG 파일로의 이미지를 포함하여 컨텐츠를 동적으로 렌더링하기 위해 응용 프로그램을 개발하고 있습니다. 나는 현재 사용 중입니다 RenderTargetBitmap 일을하는 수업. 모든 것이 예상대로 작동하지만 렌더링 된 글꼴의 품질은 끔찍합니다. 나는 그것을 이해한다 RenderTargetBitmap ClearType를 사용하지는 않지만 작은 글꼴이있는 일종의 블리 인 그레이 스케일 안티 리아를 사용합니다. 그러나 나는 30 점보다 큰 큰 글꼴을 사용하고 있으며 결과는 완전히 받아 들일 수 없습니다. 이 문제에 대한 해결 방법이 있습니까?

업데이트

내가 사용하는 코드는 아래에 나열되어 있습니다. 예상대로 CompositionTarget의 각 렌더링 이벤트에서 호출됩니다.

void CompositionTarget_Rendering(object sender, EventArgs e)
        {
            prefix = "";
            if (counter < 10)
            {
                prefix = "000";
            }
            else if (counter < 100)
            {
                prefix = "00";
            }
            else if (counter < 1000)
            {
                prefix = "0";
            }

            Size size = new Size(MainCanvas.Width, MainCanvas.Height);
            MainCanvas.Measure(size);
            MainCanvas.Arrange(new Rect(size));


            RenderTargetBitmap bmp = new RenderTargetBitmap(imgWidth, imgHeight, 96d, 96d, PixelFormats.Default);
            bmp.Render(MainCanvas);

            JpegBitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.QualityLevel = 90;
            encoder.Frames.Add(BitmapFrame.Create(bmp));
            string file = basePath + prefix + counter.ToString() + "_testpic.jpg";
            using (Stream stm = File.Create(file))
            {
                encoder.Save(stm);
            }
            counter++;
        }

결과 이미지의 몇 가지 예는 다음과 같습니다.Alt Text http://www.randomnoise.org/temp/testpic_v1.jpg 대체 텍스트 http://www.randomnoise.org/temp/testpic_v2.jpg

미리 감사드립니다.

도움이 되었습니까?

해결책 2

좋아, 나는 마침내 해결책을 찾았다. 구스타보 당신은 올바른 길을 가고있었습니다. 문제는 비트 맵으로 렌더링하려는 메인 컨테이너가 모 컨테이너에 의해 왜곡되고 있다는 것입니다. 솔루션은 기본 컨테이너를 캔버스에 추가하는 것이 었습니다.이 컨테이너는 어린이를 왜곡시키는 레이아웃 엔진이 없습니다. 나는 여전히 더 많은 실험을해야하지만 매우 유망한 것 같습니다. 분명히 rendertargetbitmap은 왜곡 된 글꼴을 좋아하지 않습니다.

다른 팁

이 시도:

int height = (int)border.ActualHeight;
int width = (int)border.ActualWidth;
RenderTargetBitmap bmp = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(border);

국경은 비트 맵으로 저장하려는 것입니다.

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