wpf创建透明的writeablebitmap

时间:2015-03-31 19:19:34

标签: c# wpf

当我创建一个这样的:

WriteableBitmap wb = new WriteableBitmap(1200, 1600, 90, 90, PixelFormats.Bgr24, null);

当我希望它是透明的时,它充满了黑色。我尝试了Clear(来自WriteableBitmapEx库),但我得到了一个尝试读取或写入受保护的内存。这通常表明其他内存已损坏。"} System.Exception {System.AccessViolationException}

wb.Clear(Colors.Transparent);

我有什么想法可以做到这一点?

编辑:

        List<FormattedText> text = new List<FormattedText>();
        WriteableBitmap wb = new WriteableBitmap(1200, 1600, 96, 96, PixelFormats.Bgr32, null);
        wb.Clear(Colors.Transparent);

        TransformedBitmap tb = new TransformedBitmap(wb, new RotateTransform(0));
        DrawingVisual drawingVisual = new DrawingVisual();
        DrawingContext drawingContext = drawingVisual.RenderOpen();
        drawingContext.DrawImage(tb, new Rect(0, 0, tb.PixelWidth, tb.PixelHeight));



        for (int i = 0; i < text.Count; i++)
        {

            drawingContext.DrawText(text[i], points[i]);
            drawingContext.DrawEllipse(null, new Pen(new SolidColorBrush(Colors.Aqua), 3), points[i], 10, 10);
        }

        drawingContext.Close();

        System.Windows.Media.Imaging.RenderTargetBitmap bmp = new System.Windows.Media.Imaging.RenderTargetBitmap(tb.PixelWidth, tb.PixelHeight, 96, 96, PixelFormats.Pbgra32);
        bmp.Render(drawingVisual);

        Image = bmp;

1 个答案:

答案 0 :(得分:1)

使用具有Alpha通道的PixelFormat创建WriteableBitmap,从而允许透明度,例如PixelFormats.Bgra32

var wb = new WriteableBitmap(1200, 1600, 96, 96, PixelFormats.Bgra32, null);

现在每个像素有四个字节,一个用于蓝色,一个用于绿色,一个用于红色,一个用于alpha值。

另请注意,您通常会使用值96作为DPI参数。