C# 如何将Pbgra32中的渲染图形转换为GDI+;启用像素级操作的位图
基本任务是将一些SVG路径转换为几何体,将其渲染为遮罩,并使用一些自定义像素旋转将遮罩应用于图像。将图像和遮罩转换为GDI+位图可以满足我的需要,但我未能找到合理的方法将绘制的渲染几何体路径转换为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
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位图上执行我需要的操作,但这更难,我真的很想知道为什么这样做不起作用,以及如何修复它。编辑很好,但输出应该显示为单类型。