C#-如何从列表在位图上绘制形状?

时间:2018-11-05 09:51:58

标签: c# graphics bitmap

我正在研究类似绘画的程序。有一个带有Sketch的usercontrol子类“ SketchControl”。草图又具有位图。

以前,每当在用户控件中绘制形状时,该形状都会直接绘制到位图上。我们必须更改程序,以便将所有表单都添加到“绘图”列表中,以便我们可以保存绘图。现在我们必须从该列表中绘制形状,但是我无法这样做。形状具有绘制方法“绘制”。

我尝试将以下代码或类似代码添加到我的SketchControl绘画方法和我的Sketch绘画方法中:

using (Graphics g = Graphics.FromImage(myBitmap))
            {
                for (int i = 0; i < drawing.Count; i++)
                {
                    drawing[i].draw(g);
                }
            }

这不起作用。

特定形状的“绘制”可能看起来像

public override void draw(Graphics gr)
         {  gr.DrawEllipse(pen, p1, p2); }

很抱歉,这是一个愚蠢的问题,但我非常感谢您的帮助。当我从列表中绘制形状而不是直接绘制到位图上时,如何获取形状以在位图上打开op?我的代码应该在哪里?

1 个答案:

答案 0 :(得分:0)

您可以检查是否保存了Graphics或draw方法的实际实现吗?这是带有图片输出的功能图

enter image description here

var drawing = new List<IDrawable>
{
    new AquaCircle(),
    new RedCircle(),
};
var imageFile = new Bitmap(200, 200);
using (var g = Graphics.FromImage(imageFile))
{
    for (var i = 0; i < drawing.Count; i++)
    {
        drawing[i].Draw(g);
    }
}

imageFile.Save("test.jpg");

形状会影响界面

public interface IDrawable
{
    void Draw(Graphics g);
}

public class AquaCircle : IDrawable
{
    void IDrawable.Draw(Graphics g)
    {
        g.DrawEllipse(new Pen(Color.Aqua, 1), 1, 1, 100, 100);
    }
}

public class RedCircle : IDrawable
{
    void IDrawable.Draw(Graphics g)
    {
        g.DrawEllipse(new Pen(Color.Red, 1), 25, 25, 100, 100);
    }
}