C#图形计算图像并保存

本文关键字:保存 图像 计算 图形 | 更新日期: 2023-09-27 18:00:28

我看到,绘制两个图像很耗时,所以我想尽可能减少绘制这些图像。我使用pictureedit并已覆盖ondraw事件。在这里我添加了下面的部分,但它最终变成了一个黑色的图像。我确实想检查一下,是否需要画画。这个检查有效。然后我画出背景,用另一个覆盖它,我想把它存储为图像,并把它作为我的控制的背景。

如果我不重新绘制背景,我只调用:

g.Clear(Color.Transparent);

在我的图片中编辑绘画事件。

我做错什么了吗?

谨致问候,

Patrick

//Recalculate the background
if (redrawBackground)
{
    g.FillRectangle(Brushes.White, 0, 0, backGroundImage.Width, backGroundImage.Height);
    g.Clear(Color.White);
    //this is drawn without aspect ration. The matrix is stored, since drawing images is expensive
    GenerateTransformation(g, false);
    g.DrawImageUnscaled(backGroundImage, new Rectangle(0, 0, backGroundImage.Width, backGroundImage.Height));
    lastTransformation = g.Transform;
    GenerateTransformation(g, true);
    g.DrawImage(foreGroundImage, new Rectangle(0, 0, backGroundImage.Width, backGroundImage.Height));
    lastTransformationAspect = g.Transform;
    //Save bitmap as background
    Bitmap bmp = new Bitmap(backGroundImage.Width, backGroundImage.Height, e.Graphics);
    //Trick the background by a new image
    pictureEdit.Image = bmp;
}

C#图形计算图像并保存

您的代码(new Bitmap(backGroundImage.Width, backGroundImage.Height, e.Graphics); )不会将图像复制到位图;它只将Graphics对象与位图相关联。

试试这个:

Bitmap bmp = new Bitmap(width, height);
Graphics g = Graphics.FromImage(bmp);
g.DrawSomething(); // This draws to the bitmap