【问题标题】:Create graphic and save it as Bitmap创建图形并将其保存为位图
【发布时间】:2010-05-21 09:16:04
【问题描述】:

我有两个问题:

1) 我有一个PictureBox,它的 Dock 设置为 Fill。当我调整Form 的大小时,我无法在扩展的PictureBox 部分创建图形。有什么问题?

2) 我想将 PictureBox 上创建的 Graphic 转换为 Bitmap 并将其另存为 *.JPG 或 *.bmp。我该怎么做?

【问题讨论】:

    标签: c# .net bitmap picturebox


    【解决方案1】:

    您可以使用handle device 将位图从图片框中取出

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

    甚至更好,如果pictureBox不修改图片,可以直接从pictureBox控件中获取图片

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

    【讨论】:

      【解决方案2】:

      试试这个,对我来说很好用...

          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)
              {
                  //
              }
          }
      

      【讨论】:

      • 我之前试过这个,不幸的是你保存的图像被限制在控件本身的大小。因此,如果您使用缩放将一个巨大的图像放入控件中,当您导出图像时,它将是渲染的大小,而不是它的实际大小。
      【解决方案3】:

      1) 你的描述很模糊。你有例外吗?它是否显示错误的结果?发生了什么?

      2) 你需要从 PictureBox 中获取图片并使用它的Save method

      【讨论】:

      • 1) 我没有收到任何 Eception,它没有显示错误的结果,只是 Grafhic 没有创建。
      • 请尝试更详细地描述这一点......真的很难理解正在发生的事情。你怎么知道它不是被创造出来的?是否只有将 Dock 设置为 Fill 时?
      • 你知道 PictureBox 有一个 MouseClick 事件。当我单击 PictureBox 时,我想在 PictureBox 上绘制一个矩形。这是可行的,但是当我将 Form 调整为更大时,因为 PictureBox 的 Dock 是 Fill,它变得像 Form 一样 lrger。调整大小后,我无法在变大的部分上创建 Grafhic .....希望您理解我的问题
      • 我可以解释一下:当从PictureBox或Panel之类的控件创建Graphics对象时,在其上绘制的图形是不稳定的:控件的Paint事件会清除重绘区域。例如,如果您尝试在具有 Graphics 对象的控件上显示一个小对话框,则在关闭对话框后,控件上的区域将被清除。另一个例子:将你的窗口移动到屏幕边缘,所以你的一半窗口从屏幕视图中掉出来-->现在将窗口设置为正常,你看不到在错位的一半上绘制的图形...
      【解决方案4】:

      当 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);
      

      希望有帮助!

      【讨论】:

      • -1:问题与PictureBox的Image无关。他尝试在控件(PictureBox、Panle 甚至 Form 本身)上绘制一些稳定的东西。
      猜你喜欢
      • 2020-10-12
      • 2013-01-29
      • 2015-09-18
      • 2014-09-14
      • 1970-01-01
      • 2015-01-14
      • 2013-06-17
      • 1970-01-01
      • 2015-11-03
      相关资源
      最近更新 更多