在位图图像中设置背景颜色

时间:2012-05-30 12:44:28

标签: c# wpf image bitmap

我想将画布保存到图像中。它有效,但背景颜色为黑色。如何添加以改变颜色?

我使用此代码:

Size size = new Size(surface.Width, surface.Height);

surface.Measure(size);
surface.Arrange(new Rect(size));

// Create a render bitmap and push the surface to it
RenderTargetBitmap renderBitmap =
    new RenderTargetBitmap((int)size.Width, (int)size.Height, 96d, 96d,
                           PixelFormats.Pbgra32);
renderBitmap.Render(surface);

// Create a file stream for saving image
using (FileStream outStream = new FileStream(filename, FileMode.Create))
{
    BmpBitmapEncoder encoder = new BmpBitmapEncoder();
    // push the rendered bitmap to it
    encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
    // save the data to the stream
    encoder.Save(outStream);
}

2 个答案:

答案 0 :(得分:3)

试试这个

Size size = new Size(surface.Width, surface.Height);

surface.Measure(size);
surface.Arrange(new Rect(size));

// Create a render bitmap and push the surface to it
RenderTargetBitmap renderBitmap =
    new RenderTargetBitmap((int)size.Width, (int)size.Height, 96d, 96d,
                           PixelFormats.Pbgra32);

DrawingVisual drawingVisual = new DrawingVisual();
using (DrawingContext drawingContext = drawingVisual.RenderOpen())
{
    VisualBrush visualBrush = new VisualBrush(surface);
    drawingContext.DrawRectangle(visualBrush, null, 
      new Rect(new Point(), new Size(size.Width, size.Height)));
}

renderBitmap.Render(drawingVisual);

// Create a file stream for saving image
using (FileStream outStream = new FileStream(filename, FileMode.Create))
{
    BmpBitmapEncoder encoder = new BmpBitmapEncoder();
    // push the rendered bitmap to it
    encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
    // save the data to the stream
    encoder.Save(outStream);
}

答案 1 :(得分:2)

尝试PixelFormats.DefaultPixelFormats.Bgra32PixelFormats.Rgb24代替PixelFormats.Pbgra32

P 代表预乘 - 假设每个频道都预先乘以alpha。

MSDN reference