WPF的文本抗锯齿有问题。在我的应用程序中,用户使用特殊的打印设备设计要打印的文本或图像字段。我使用画布来托管字段,这些字段是文本块或图像
问题是当我将这个画布转换为RenderTargetBitmap,然后转换为黑白格式的ConfConedBitmap时,文本和图像最终看起来非常模糊。
我尝试过使用“snaptodevicepixels = true”和“RenderOptions.EdgeMode”=对应用程序中的所有内容进行别名。我知道抗锯齿非常适合屏幕,但打印是一场真正的灾难。
以下是我的代码示例:
private BitmapSource GetCanvasAsBitmap(Canvas cvs)
{
cvs.Background = Brushes.White;
RenderOptions.SetEdgeMode(cvs, EdgeMode.Aliased);
cvs.SnapsToDevicePixels = true;
// render TopCanvas visual tree to the RenderTargetBitmap
Size CanvasSize = new Size(cvs.Width, cvs.Height);
cvs.Measure(CanvasSize);
Rect CanvasRect = new Rect(CanvasSize);
cvs.Arrange(CanvasRect);
RenderTargetBitmap targetBitmap =
new RenderTargetBitmap((int)cvs.ActualWidth,
(int)cvs.ActualHeight,
96, 96,
PixelFormats.Default);
targetBitmap.Render(cvs);
double scale = PIXELSCALE / cvs.Height;
ScaleTransform ST = new ScaleTransform(scale, scale);
TransformedBitmap TB = new TransformedBitmap(targetBitmap, ST);
return TB;
}
private static FormatConvertedBitmap Recolor(BitmapSource b)
{
BmpBitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(b));
using (FileStream fs = new FileStream("BeforeRecolor.bmp", FileMode.Create))
{
encoder.Save(fs);
fs.Flush();
fs.Close();
}
FormatConvertedBitmap FCB = new FormatConvertedBitmap(b, PixelFormats.Indexed1, new BitmapPalette(new List<Color>() { Colors.Black, Colors.White }), 0);
BmpBitmapEncoder en = new BmpBitmapEncoder();
en.Frames.Add(BitmapFrame.Create(FCB));
using (FileStream fs = new FileStream("AfterRecolor.bmp", FileMode.Create))
{
en.Save(fs);
fs.Flush();
fs.Close();
}
return FCB;
}
如何在创建rendertargetbitmap之前关闭防瞄准程序?
答案 0 :(得分:0)
http://blogs.msdn.com/b/dwayneneed/archive/2008/06/20/implementing-a-custom-bitmapsource.aspx
显然,抖动类型是硬编码的
FormatConvertedBitmap
此类包装标准WIC像素格式 转换器(IWICImagingFactory :: CreateFormatConverter)。这个组件 提供从一种像素格式转换为另一种像素格式的方法, 处理抖动和半色调到索引格式,调色板 翻译和alpha阈值。 Source,DestinationFormat, DestinationPalette和AlphaThreshold属性用于 通过初始化底层组件 IWICFormatConverter ::初始化。 抖动类型是硬编码的 WICBitmapDitherTypeErrorDiffusion。调色板翻译类型为 硬编码为WICBitmapPaletteTypeMedianCut。 ISupportInitialize interface用于捕获属性的值 初始化完成。对房产的进一步改变是 忽略。