Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将Pbgra32中的渲染图形转换为GDI+;启用像素级操作的位图_C#_Wpf_Bitmap_Gdi+ - Fatal编程技术网

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

C# 如何将Pbgra32中的渲染图形转换为GDI+;启用像素级操作的位图,c#,wpf,bitmap,gdi+,C#,Wpf,Bitmap,Gdi+,基本任务是将一些SVG路径转换为几何体,将其渲染为遮罩,并使用一些自定义像素旋转将遮罩应用于图像。将图像和遮罩转换为GDI+位图可以满足我的需要,但我未能找到合理的方法将绘制的渲染几何体路径转换为GDI+位图并保持透明度(这是一种整点) 代码片段如下所示。 using (DrawingContext dc = dv.RenderOpen()) { dc.DrawGeometry(new SolidColorBrush(MaskColour), new Pen(new SolidCol

基本任务是将一些SVG路径转换为几何体,将其渲染为遮罩,并使用一些自定义像素旋转将遮罩应用于图像。将图像和遮罩转换为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, 96, PixelFormats.Bgra32);
  //_renderbitmap = new RenderTargetBitmap(Width*Spacing, Height*Spacing, 96, 96, PixelFormats.Rgba64);
  _renderbitmap = new RenderTargetBitmap(Width*Spacing, Height*Spacing, 96, 96, 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]
这些链接指向的是让我走到这一步的问题

尝试渲染为Bgra32失败,出现格式错误。直接使用渲染位图或通过格式转换,都会导致透明像素变为黑色。第一道是OK,第二道是纯黑,应该是透明的


有一些方法可以直接在WPF位图上执行我需要的操作,但这更难,我真的很想知道为什么这样做不起作用,以及如何修复它。

编辑很好,但输出应该显示为单类型。