各位高手,我在panel下画了个图片(通过另一个函数画的),怎么将这个区域内的图片保存下来呢?我保存时候总是个黑框。想着应该是bitmap^ bitimg 里是空的,没有图片搞的。怎么解决呢?
或者说:怎么保存form特定panel区域的图片呢?不要求分辨率什么的。

解决方案 »

  1.   

    Graphics   g1=panel1.CreateGraphics(); 
    Image   myImage =new   Bitmap(this.panel1.Width,   this.panel1.Height,   g1); 
    Graphics   g2 =Graphics.FromImage(myImage); 
    IntPtr   dc1 =g1.GetHdc(); 
    IntPtr   dc2=g2.GetHdc(); 
    BitBlt(dc2,0,0,this.panel1.Width,this.panel1.Height,dc1,0,0,13369376); 
    g1.ReleaseHdc(dc1); 
    g2.ReleaseHdc(dc2); 
    myImage.Save(@ "C:\a.bmp ",   ImageFormat.Bmp); 
      

  2.   

    你如何绘制到Panel的?我建议你这样,绘制到一个位图上,然后把位图贴到Panel上,你想保存就保存这个缓存图。例如public class Form2 : Form
    {
        Panel panel1 = new Panel();
        public Form2()
        {
            panel1.Dock = DockStyle.Fill;
            panel1.Paint += new PaintEventHandler(panel1_Paint);
            panel1.Click += new EventHandler(panel1_Click);
            this.Controls.Add(panel1);
        }    void panel1_Click(object sender, EventArgs e)
        {
            //单击Panel1则保存
            buffer.Save("buffer.bmp");
        }    Bitmap buffer = null;
        void panel1_Paint(object sender, PaintEventArgs e)
        {
            if (buffer == null) buffer = new Bitmap(panel1.Width, panel1.Height);
            if (buffer.Width != panel1.Width || buffer.Height != panel1.Height) buffer = new Bitmap(panel1.Width, panel1.Height);
            using (Graphics g = Graphics.FromImage(buffer))
            {
                g.DrawLine(Pens.Blue, 0, 0, 175, 233);
            }
            e.Graphics.DrawImage(buffer, 0, 0);
        }
    }
      

  3.   

    就是不知道怎么将panel的图片等于我这个bitmap^ bit_img
      

  4.   

    专门在一个按钮下调用了一个函数DrawSector(),这个是自己写的。。然后从那个函数里面直接保存就很简单,但是我要在另一个按钮按下时候再保存图像。所以就总也对不上