none
用Graphics绘制的图像如何保存成文件? RRS feed

  • 问题

  • 问题是这样的 我用VS08 VB.NET写了下面一段代码,目的是让程序截取屏幕的一部分放到PictureBox1控件中

    但是我在使用PictureBox1的SAVE来保存的时候却提示错误,'Object reference not set to an instance of an object.  不知道为何?有什么办法能使截取到PictureBox1控件的图像保存到文件的方法么?怎么实现?

            Dim ScreenGraphics As Graphics = PictureBox1.CreateGraphics

            ScreenGraphics.CopyFromScreen(New Point(1, 1), New Point(5, 5),  New Size(80, 80))
            PictureBox1.Image.Save("c:\image.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
           


     还希望知道的老师赐教 谢谢!

    2010年6月9日 4:05

答案

  • 你好!

         你订阅PictureBox的Paint事件,然后利用e.Graphics画图,然后用DrawToBitmap保存就可以了!

         实际上我推荐你使用我第一次回复的那个方法,灵活性更大!操作PictureBox当然主要靠Image!


    周雪峰
    • 已标记为答案 magic_os 2010年6月11日 3:41
    • 已标记为答案 magic_os 2010年6月12日 3:37
    2010年6月10日 14:27
    版主

全部回复

  • 你好!

         你需要把图像画到一个Image上,然后设置PictureBox的Image属性,然后再保存!


    周雪峰
    2010年6月9日 11:11
    版主
  • 你好!

         如果仅仅是画到PictureBox里(PictureBox没有加载图片)怎样将画到PictureBox的图像或者说我上面的那个截取屏幕的一部分的那个图像,怎样保存成一个文件呢?

    2010年6月10日 2:33
  • 换个思路...我用下面这段代码首先加载一张空白图1.jpg到 PictureBox1,

    然后在上面绘制一个圆,最后使用 PictureBox1.Image.Save来保存,但是保存的图片仍然是空白的 并没有那个绘制上去的圆,

    有什么办法能将那个绘制的圆也保存到图片里面去?

    PictureBox1.Image = Image.FromFile(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\1.jpg")

    Dim PictureGraphics As Graphics = PictureBox1.CreateGraphics

    PictureGraphics.FillEllipse(Brushes.Black, New Rectangle(0, 0, 100, 100))

    PictureBox1.Image.Save(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\ss.jpg")

    2010年6月10日 10:27
  • 你好!

         如果仅仅是画到PictureBox里(PictureBox没有加载图片)怎样将画到PictureBox的图像或者说我上面的那个截取屏幕的一部分的那个图像,怎样保存成一个文件呢?


    不用换思路,如果你想这样,十分简单,从Control继承的控件,都有一个DrawToBitmap方法,直接就实现你的需求了!
    周雪峰
    2010年6月10日 11:19
    版主
  • 你好!

         我使用下面的代码,PictureBox的一部分确实使用DrawToBitmap方法保存成文件了 , 但是绘制在PictureBox里的圆圈并没有一起保存(保存后的图片仅仅是一个空的背景)。。不知道怎么将绘制在PictureBox里面的东西也一起保存成一张图片?

     

            Dim g As Graphics = PictureBox1.CreateGraphics
            Dim bmp As New Bitmap(100, 100)
            g.FillEllipse(Brushes.Black, New Rectangle(0, 0, 100, 100))


            PictureBox1.DrawToBitmap(bmp, New Rectangle(0, 0, 100, 100))

            bmp.Save(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\1.jpg")

    2010年6月10日 13:21
  • 你好!

         你订阅PictureBox的Paint事件,然后利用e.Graphics画图,然后用DrawToBitmap保存就可以了!

         实际上我推荐你使用我第一次回复的那个方法,灵活性更大!操作PictureBox当然主要靠Image!


    周雪峰
    • 已标记为答案 magic_os 2010年6月11日 3:41
    • 已标记为答案 magic_os 2010年6月12日 3:37
    2010年6月10日 14:27
    版主
  • 你好!

           非常感谢,您所提供的两套思路均以实现!

           问题解决了!

           

    2010年6月11日 3:41