如何将Pbgra32中的渲染图转换为GDI +位图以启用像素级操作

问题描述

基本任务是将一些SVG路径转换为Geometry,将其渲染为蒙版,然后通过一些自定义像素旋转将蒙版应用于图像。将图像和蒙版转换为GDI +位图可以满足我的需要,但是我没有找到一种合理的方法将绘制的渲染几何路径转换为GDI +位图并保留透明度(这很重要)。

代码片段如下所示。

  using (DrawingContext dc = dv.Renderopen()) {
    dc.DrawGeometry(new SolidColorBrush(MaskColour),new Pen(new SolidColorBrush(Colors.Transparent),2),geo);
  }

  // these fail with format error
  //_renderbitmap = new rendertargetBitmap(Width*Spacing,Height*Spacing,96,PixelFormats.Bgra32);
  //_renderbitmap = new rendertargetBitmap(Width*Spacing,PixelFormats.Rgba64);
  _renderbitmap = new rendertargetBitmap(Width*Spacing,PixelFormats.Pbgra32);
  _renderbitmap.Render(dv);
}

internal void MakeFinal() {
  FormatConvertedBitmap fcb = new FormatConvertedBitmap(_renderbitmap,PixelFormats.Bgra32,null,0);

  var picture = _bitmap.ToWinFormsBitmap();
  Logger.Trace(3,$"MakeFinal pic px00={picture.GetPixel(0,0)}");
  var mask = fcb.ToWinFormsBitmap();
  Logger.Trace(3,$"MakeFinal mask px00={mask.GetPixel(0,0)}");

Output (from Trace):
|  MakeFinal pic px00=Color [A=255,R=110,G=78,B=93]
|  MakeFinal mask px00=Color [A=255,R=0,G=0,B=0]

这些链接指向的问题使我走了这么远。

Converting bitmapimage to bitmap and vice versa

Load a wpf bitmapimage from a system drawing bitmap

Converting from pbgra32 to bgr32 pixelformats using formatconvertedbitmap

尝试渲染到Bgra32中失败,并出现格式错误。直接使用渲染的位图或通过格式转换都会导致透明像素最终变成黑色。第一次跟踪正常,第二次跟踪为纯黑色,应该透明。

有很多方法可以直接在WPF位图上执行我需要的操作,但是这比较困难,我真的很想知道为什么这样做不起作用以及如何解决它。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)