关闭黑色和白色位图的抗锯齿从画布渲染

时间:2011-07-01 16:37:55

标签: c# wpf bitmap antialiasing

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之前关闭防瞄准程序?

1 个答案:

答案 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用于捕获属性的值   初始化完成。对房产的进一步改变是   忽略。