2012-09-26 26 views
3

我有一张图片显示人体,我想用形状来定位病人的伤势。当用户点击按钮时,所有的形状都会显示出来。现在我只用一种形状进行测试。将形状放置在c中的图像前#

这是我的代码。

private void button7_Click_4(object sender, EventArgs e) 
    { 
     Graphics g = this.CreateGraphics(); 
     g.Clear(this.BackColor); 

     Image img = Image.FromFile("C:\\Users\\HDAdmin\\Pictures\\humanbody\\effect2.png"); 
     g.DrawImage(img, 0, 0, img.Height, img.Width); 
     g.Dispose(); 
    } 

现在,形状出现在图像的背面。所以我想如何让这个形状出现在图片前?

enter image description here

+0

我想你可能会首先绘制形状,然后是图像。你能告诉我们你用来绘制形状的代码吗? – 3aw5TZetdf

回答

4

几个问题。

1)绘画应该发生在绘画事件中。不要使用CreateGraphics,因为那只会是一个临时图形。

2)你的DrawImage宽度和高度参数是相反的。

3)它看起来并不像你画你有窗体上的PictureBox控件:

private Image img; 

public Form1() { 
    InitializeComponent(); 
    button1.Click += button1_Click; 
    pictureBox1.Paint += pictureBox1_Paint; 
} 

void button1_Click(object sender, EventArgs e) { 
    img = = Image.FromFile("C:\\Users\\HDAdmin\\Pictures\\humanbody\\effect2.png"); 
    pictureBox1.Invalidate(); 
} 

void pictureBox1_Paint(object sender, PaintEventArgs e) { 
    e.Graphics.Clear(pictureBox1.BackColor); 

    if (img != null) { 
    e.Graphics.DrawImage(img, 0, 0, img.Width, img.Height); 

    //Draw test shape: 
    e.Graphics.DrawRectangle(Pens.Red, new Rectangle(10, 10, 20, 60)); 
    } 
} 
+0

我复制粘贴你的代码到我的。它仍然出现在图片背面的形状..我犯了错误吗? –

+0

@sarabrown如果它不起作用,那么你有代码运行,我们看不到。有一点很突出,你的代码似乎是在表单本身上绘制的,你也有明显的按钮。一般来说,你应该有一个Panel或一个PictureBox控件来显示这个图像。 – LarsTech

+0

即时通讯工具箱中使用的组件,我只拖动任何组件到我希望使用的地方。图片来自图片框并放置在面板内。我也编辑我的帖子,以获得更好的观点。希望能帮助到你。 –

0

我想你应该先把人形象的图形,然后在其上绘制形状图像。有些事情是这样的:

Image img = Image.FromFile("C:\\Users\\HDAdmin\\Pictures\\humanbody\\effect2.png"); 

Graphics g = Graphics.FromImage (img); 

g.DrawImage(ShapeImage, 0, 0, 30, 30); // you can set your required x,y,width,height 
+0

它不会工作,它出现在图片的背面。你有没有其他的解决方案,或者可能是以一种错误的方式去做? –