用MDI的主窗体的菜单中的SAVE菜单项把子窗体上画的图形保存为JPG文件。(子窗体上有按钮以确定所画的图形如:圆、线、矩形等,用鼠标点击按钮后即可在窗体上画图)大部分已经完成了只差这最后一个功能了,只知道要用流和SaveFileDialog,但怎样才能把子窗体上画的图形取出并用流保存为JPG呢?

解决方案 »

  1.   

    用一个PictureBox作为GDI+的载体。最后将Picuture里的内容保存出去。
      

  2.   

    你的图形是画在PictureBox上的么? 问题不是很明确
    System.IO.MemoryStream stream = new System.IO.MemoryStream();
    pictureBox1.Image.Save(stream,System.Drawing.Imaging.ImageFormat.Jpeg); //JPEG格式
    Bitmap bmp = new Bitmap(stream);
      

  3.   

    不是画在PictureBox上,我直接在窗体上画的
      

  4.   

    PictureBox是显示图片的,不是画图的。MDIFRM.BACKGROUDIMAGE.SAVE(....);可不可以具体点
      

  5.   

    纯管理代码:将你的绘制代码独立出来,创建Bitmap,创建bitmap的graphics,传入绘制函数中
    非管理代码:参考msdn之windows gdi-Bitmaps-capturing an image
      

  6.   

    Form frm = this.ActiveMdiChild as Form; if(frm != null){
    MethodInfo method = frm.GetType().GetMethod("OnPaint", BindingFlags.NonPublic | BindingFlags.Instance);
    MethodInfo method2 = frm.GetType().GetMethod("OnPaintBackground", BindingFlags.NonPublic | BindingFlags.Instance);
    Bitmap bit = new Bitmap(frm.ClientSize.Width, frm.ClientSize.Height, frm.CreateGraphics()); method2.Invoke(frm, new object[]{new PaintEventArgs(Graphics.FromImage(bit), new Rectangle(0, 0, bit.Width, bit.Height))});
    method.Invoke(frm, new object[]{new PaintEventArgs(Graphics.FromImage(bit), new Rectangle(0, 0, bit.Width, bit.Height))});
    bit.Save(@"1.bmp");
    }
    窗体上的子控件此方法不能画出
      

  7.   

    Form frm = ActiveMdiChild; if(frm != null)
    {
    Bitmap bit = new Bitmap(frm.ClientSize.Width, frm.ClientSize.Height);
    //IntPtr hDc = GetWindowDC(frm.Handle);
    Graphics hG = frm.CreateGraphics();
    IntPtr hDc = hG.GetHdc();
    Graphics bitG = Graphics.FromImage(bit);
    IntPtr bitDc = bitG.GetHdc();

    BitBlt(bitDc, 0, 0, bit.Width, bit.Height, hDc, 0, 0, 0x00CC0020);
    hG.ReleaseHdc(hDc);
    hG.Dispose();
    bitG.ReleaseHdc(bitDc);
    bitG.Dispose();
    // ReleaseDC(frm.Handle, hDc);
    bit.Save("1.bmp");
    }
    不捕获caption
    去掉,改动相应部分,ClientSize变Size,捕获整个窗体
      

  8.   

    我如何把子窗体中画的图型的颜色改为白色,
    另外,如何用流和SaveFileDialog把获得的图保存为JPG文件
      

  9.   

    背景白色?样例1中OnPaintBackground不掉用,在OnPaint前,bitmap.setpixel设每个像素为白色。
    SaveFileDialog获取文件名,bitmap.save保存文件。jpeg不直接支持保存,你需要找第三方工具
      

  10.   

    子窗体中画的图型的颜色改为白色
    pens.white?
      

  11.   

    我自己搞定了,要先定义一个Bitmap对象放在内存中,把图画在对象中。