2010-05-21 127 views
8

我有两个问题:创建图形,并保存为位图

1)我有一个PictureBox和码头设置为填充。当我调整Form的大小时,我无法在延伸的PictureBox部分创建图形。问题是什么?

2)我想将在PictureBox上创建的图形转换为Bitmap并将其保存为 * .JPG或* .bmp。我怎样才能做到这一点?

回答

6

可以使用handle device得到位图出来的图片框

Graphics g = pictureBox1.CreateGraphics();   
Bitmap bitMap = Bitmap.FromHbitmap(g.GetHdc()); 
bitMap.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg); 

甚至更​​好的,如果在PictureBox does`nt修改图像,你可以直接从PictureBox控件

获得图像
pictureBox1.Image.Save("path", System.Drawing.Imaging.ImageFormat.Jpeg); 
0

1)您的描述非常含糊。你有例外吗?它显示错误的结果吗?发生什么事?

2)您需要从PictureBox获取图像并使用其Save method

+0

1)我没有得到任何Eception和它不显示错误的结果只是Grafhic犯规科瑞。 – 2010-05-21 09:38:06

+0

请尝试对此进行更详细的描述......真的很难理解正在发生的事情。你怎么知道它没有被创建?这只有当你设置码头填充? – mafu 2010-05-21 09:54:20

+0

你知道一个PictureBox有一个MouseClick事件。当我点击图片框时,我想在PictureBox上绘制一个矩形。它是工作,但是当我调整窗体大小的情况下,PictureBox的Dock填充它变成像Form一样的lrger。调整大小后,我无法创建Grafhic的部分变得更大.....我希望你明白我的问题 – 2010-05-21 10:26:44

0

当Picturebox被调整大小以填充窗体时,看起来它的Image属性保持不变。

所以你需要做的是处理PictureBox.OnSizeChanged事件,然后用下面的代码来调整图像大小:

private void pictureBox1_SizeChanged(object sender, EventArgs e) 
{ 
    if ((pictureBox1.Image != null)) 
    { 
     pictureBox1.Image = new Bitmap(pictureBox1.Image, pictureBox1.Size); 
    } 
} 

要保存图像使用:

pictureBox1.Image.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg); 

希望这有帮助!

+0

-1:问题与PictureBox的图像无关。他试图在控件上绘制稳定的东西(PictureBox,Panle甚至Form本身)。 – 2010-05-25 12:52:20

1

试试这个,工作正常,我...

private void SaveControlImage(Control ctr) 
    { 
     try 
     { 
      var imagePath = @"C:\Image.png"; 

      Image bmp = new Bitmap(ctr.Width, ctr.Height); 
      var gg = Graphics.FromImage(bmp); 
      var rect = ctr.RectangleToScreen(ctr.ClientRectangle); 
      gg.CopyFromScreen(rect.Location, Point.Empty, ctr.Size); 

      bmp.Save(imagePath); 
      Process.Start(imagePath); 

     } 
     catch (Exception) 
     { 
      // 
     } 
    } 
+0

我之前尝试过,不幸的是,您保存的图像仅限于控件本身的大小。因此,如果您使用缩放来将巨大的图片放入控件中,那么当您导出图片时,它将是渲染大小而不是实际大小。 – Zorgarath 2016-12-07 07:02:56