WPF 4.0 печально известен исправлением проблемы размытого текста .Настройка TextOptions.TextFormattingMode="Display"
использует пиксельные подсказки для выравнивания символов, что очень хорошо работает для улучшения наглядности.
Однако это не работает, когда программа работает как служба Windows в сеансе 0;текст возвращается к «идеальному» рендерингу, который при небольших размерах совершенно не читается.Ниже приведено сравнение двух визуализаций.
Не работает как служба:

Работает как служба:

Код рендеринга:
//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);
}
Я понимаю, что для подсказок при рендеринге шрифтов в качестве службы отсутствуют пиксели экрана, но не следует ли получить пиксельные подсказки из растрового изображения, которое он отображаетк?Могу ли я что-нибудь с этим сделать?
РЕДАКТИРОВАТЬ: Очевидно, это IS с использованием пиксельных подсказок, но по некоторым причинам это сглаживание.Ниже приведено растровое изображение перед уменьшением до 1 бита / пиксель.

У меня установлено TextOptions.TextRenderingMode="Aliased"
, и кажется, что WPF игнорирует это при работе в качестве службы?Это должно быть хорошо выглядеть, когда урезан.Как я могу форсировать это?
EDIT2: Возможно, это связано с рендерингом WPF на уровне 0 (программный режим) при работе в качестве службы и на уровне 2 (аппаратное обеспечение), если нет.
EDIT3: В Windows XP в качестве службы она выглядит следующим образом:

Обратите внимание на разницу полей, размер шрифтаразница, и в остальном идеальный рендеринг.WTF?