我需要在白色背景上創建一個小而簡單的TIFF圖像,該圖像只是黑色文本,作爲我們在多個產品中使用的支持庫的一部分。 (想想簡單的收據或存款票,那種事)。我寧願不必使用任何第三方庫,以避免要求我們向使用該庫的所有現有產品添加額外的依賴關係。如何在使用RenderTargetBitmap時獲得高質量的文本?
根據this question的代碼,我幾乎已經用WPF解決了問題。 TIFF創建並呈現正確,但文本質量是可怕的。據我所知,問題在於RenderTargetBitmap
,至少是我使用它的方式,沒有做任何反鋸齒,不使用ClearType,否則在渲染純文本時會非常糟糕如:
我讀過類似的問題,比如this one或this one,但他們似乎都討論如何捕捉從視覺控制或窗口句柄文本不降低質量。我完全在屏幕外進行此操作,所以我不清楚是否/如何將這些解決方案應用於我的問題。
目前我在做什麼是:
var visual = new DrawingVisual();
using (var draw = visual.RenderOpen())
{
// 'background' is a pre-loaded blank white bitmap
draw.DrawImage(background, new Rect(0, 0, IMG_WIDTH, IMG_HEIGHT));
var font = new Typeface("Segoe UI");
Func<string, FormattedText> format = s => new FormattedText(
s,
CultureInfo.CurrentUICulture,
FlowDirection.LeftToRight,
font,
16,
Brushes.Black);
draw.DrawText(format("Some text"), new Point(HEADER_LEFT, HEADER_TOP);
// Call draw.DrawText a whole bunch more times.
.
.
.
}
var render = new RenderTargetBitmap(IMG_WIDTH, IMG_HEIGHT, IMG_DPI, IMG_DPI, PixelFormats.Default);
render.Render(visual);
var encoder = new TiffBitmapEncoder()
{
Compression = TiffCompressOption.Ccitt4
};
encoder.Frames.Add(BitmapFrame.Create(render));
var stream = new MemoryStream();
encoder.Save(stream);
有沒有別的東西,我可以把那裏獲取文本的質量比它是什麼更好?
所以,雙色調是必需的。字體的選擇是否也是一項要求?對於小的雙色調圖像,我想知道,如果可以限制足夠的用例,位圖字體(等)不是最佳選擇 - 您需要多大的尺寸? –
不,字體是隨意的,我可以挑選大小約爲10-14的任何東西。我會嘗試一些其他的。 –