禁用从画布渲染的黑白位图的抗锯齿

本文关键字:位图 黑白 布渲染 | 更新日期: 2023-09-27 18:00:49

我对WPF的文本抗锯齿有问题。在我的应用程序中,用户设计要使用特殊打印设备打印的文本或图像字段。我正在使用画布来托管字段,这些字段要么是文本块,要么是图像

问题是,当我将此画布转换为RenderTargetBitmap,然后转换为黑白FormatConvertedBitmap时,文本和图像看起来非常模糊。

我尝试过在应用程序中的所有内容上使用"snaptodevicepixels=true"answers"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之前,如何关闭antiilasing?

禁用从画布渲染的黑白位图的抗锯齿

http://blogs.msdn.com/b/dwayneneed/archive/2008/06/20/implementing-a-custom-bitmapsource.aspx

显然抖动类型是硬编码

格式转换位图

此类包装标准的WIC像素格式转换器(IWICImagingFactory::CreateFormatConverter(。此组件提供了从一种像素格式转换为另一种像素形式的手段,将抖动和半色调处理为索引格式、调色板平移和阿尔法阈值。Source、DestinationFormat,DestinationPalette和AlphaThreshold属性用于通过初始化基础组件IWICFormatConverter::初始化抖动类型被硬编码为WICBitmapDitherTypeErrorDiffusion调色板翻译类型为硬编码为WICBitmapPaletteTypeMedianCut。ISupportInitialize接口用于在以下情况下捕捉属性的值初始化完成。属性的进一步更改已忽略。