WPF 4.0 печально зафиксировано blurry text issue. В настройке TextOptions.TextFormattingMode="Display"
используются пиксельные подсказки для выравнивания символов, которые работают очень хорошо, чтобы улучшить ясность.Непоследовательность визуализации текста WPF
Однако он не работает, пока программа работает как служба Windows в сеансе 0; текст возвращается к «Идеальному» рендерингу, который при небольших размерах совершенно нечитабелен. Ниже приведено сравнение двух визуализаций.
Не работает как служба:
Запуск в качестве службы:
Rendering код:
//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: Видимо, IS с помощью пиксельных подсказки, но это сглаживанием по какой-то причине. Ниже представлена развернутая растровая карта, прежде чем она будет уменьшена до 1 бит/пиксель.
У меня есть TextOptions.TextRenderingMode="Aliased"
набор и кажется, что WPF игнорирует, что при работе в качестве службы? Он должен хорошо выглядеть, когда сбрасывается. Как я могу заставить его?
EDIT2: Возможно, это связано с рендерингом WPF в Tier 0 (программный режим) при работе в качестве сервиса и уровня 2 (аппаратное обеспечение), когда нет.
EDIT3: В Windows XP, как сервис, он делает так:
Обратите внимание разница маржа, разница размер шрифта, и в противном случае идеальный рендеринга. WTF?
RenderTargetBitmap в .NET 4 будет отображать на аппаратном обеспечении, если он доступен. И я не хочу сглаживания; изображение должно быть уменьшено до 1 бит/пиксель и будет выглядеть плохо, если есть серые тона. –
RTB не отображает аппаратные средства ... когда-либо. Даже в 4.0. Проверьте ответ Брендана Кларка здесь: http://social.msdn.microsoft.com/Forums/en/wpfprerelease/thread/e2ebf264-e087-4bfe-a69b-24c884675c80 –
спасибо, я ошибся.Но я не понимаю, почему RenderTargetBitmap.Render будет работать по-разному в программном режиме и аппаратном режиме. –