【问题标题】:wpf create transparent writeablebitmapwpf 创建透明可写位图
【发布时间】:2015-04-01 03:41:40
【问题描述】:

当我像这样创建一个时:

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

当我想让它透明时,它会被黑色填充。我尝试了清除(来自 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;

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 你说得对。但由于某种原因,它仍然是黑色的。我会发布更多代码。
    • Bgr32不是我想要的吗?
    • 不,是Bgra32,代表Blue、Green、Red、A阿尔法。
    • 我发誓我是从您的帖子中复制的...这是漫长的一天:P
    猜你喜欢
    • 2013-11-03
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 1970-01-01
    • 2012-06-16
    • 2019-01-04
    • 1970-01-01
    相关资源
    最近更新 更多