WPF 4.0은 악명 높게 blurry text issue을 수정했습니다. TextOptions.TextFormattingMode="Display"
설정은 픽셀 힌트를 사용하여 문자를 정렬합니다. 이는 선명도를 향상시키는 데 효과적입니다.WPF 텍스트 렌더링 불일치
그러나 프로그램이 세션 0에서 Windows 서비스로 실행되는 동안에는 작동하지 않습니다. 텍스트는 작은 크기에서 완전히 읽을 수없는 "이상적인"렌더링으로 돌아갑니다. 다음은 두 렌더링의 비교입니다.
는 서비스로 실행되지 않음 :렌더링 코드 : 나는 어떤 화면 픽셀이없는 실현
//rtb is a RenderTargetBitmap
//c is a FormatConvertedBitmap with rtb as it's source
while (displayRunning) {
if (lcd != null) {
Dispatcher.Invoke(new ThreadStart(delegate() {
if (dv == null) {
dv = new DrawingVisual();
using (DrawingContext dc = dv.RenderOpen()) {
dc.DrawRectangle(Brushes.White, new Pen(), new Rect(0, 0, 256, 64));
dc.Close();
}
}
rtb.Render(dv);
rtb.Render((Visual)Content);
//bitmap output just for testing
PngBitmapEncoder e = new PngBitmapEncoder();
e.Frames.Add(BitmapFrame.Create(c));
using (FileStream f = File.Open("C:\\test.png", FileMode.Create))
e.Save(f);
WriteableBitmap bitmapdata = new WriteableBitmap(c);
srcdata = new byte[bitmapdata.BackBufferStride * bitmapdata.PixelHeight];
System.Runtime.InteropServices.Marshal.Copy(bitmapdata.BackBuffer, srcdata, 0, srcdata.Length);
}));
try {
framesender.Send(new PicoLCDFrame(srcdata, lcd.OutputReportLength), lcd);
} catch (NullReferenceException) { } // device was unplugged
}
Thread.Sleep(33);
}
서비스로 실행 힌트 w 폰트를 서비스로 렌더링하지만 폰트를 렌더링 할 비트 맵에서 픽셀 힌트를 가져 오면 안 되니? 이것에 대해 제가 할 수있는 일이 있습니까?
EDIT : 명백하게 그것을 화소 힌트를 사용이지만, 어떤 이유로 앨리어싱이다. 아래는 1 비트/픽셀로 다운 샘플링되기 전에 렌더 된 비트 맵입니다.
내가 TextOptions.TextRenderingMode="Aliased"
세트를 가지고 수행하고 서비스로 실행할 때 WPF가 있음을 무시하는 것 같다? 다운 샘플링 할 때보기 좋게 켜야합니다. 강제로 어떻게 할 수 있습니까?
EDIT2 : 서비스로 실행 중일 때는 계층 0 (소프트웨어 모드)이고 그렇지 않으면 계층 2 (하드웨어)에서 WPF 렌더링과 관련이있을 수 있습니다.
EDIT3 : 윈도우 XP에서는 서비스로,이 같은 렌더링 :
공지 마진 차이, 글꼴 크기 차이, 그리고 다른 완벽한 렌더링. WTF?
.NET 4의 RenderTargetBitmap은 가능한 경우 하드웨어로 렌더링됩니다. 그리고 앤티 앨리어싱을 원하지 않습니다. 이미지를 1 비트/픽셀로 다운 샘플링해야하며 회색 톤이 있으면 불량하게 보입니다. –
RTB가 하드웨어에서 렌더링되지 않습니다. 4.0 에서조차. Brendan Clark의 대답을 확인하십시오. http://social.msdn.microsoft.com/Forums/en/wpfprerelease/thread/e2ebf264-e087-4bfe-a69b-24c884675c80 –
감사합니다. 나는 그것에 대해 틀 렸습니다.하지만 RenderTargetBitmap.Render가 하드웨어 모드와 하드웨어 모드에서 다르게 렌더링되는 이유는 알 수 없습니다. –