偶用VB写了一个程序,就是在一个picturebox控件里显示函数图像的程序.用line和pset方法.然后用commondialog控件,弹出"另存为"对话框,用savepicture保存picturebox里的图像.结果保存的图像只有背景色,自己画上去的点和线都没有了.哪位大虾帮帮偶啊

解决方案 »

  1.   

    Option ExplicitPrivate Sub Command1_Click()
        Picture1.DrawWidth = 2
        Picture1.Line (0, 0)-(2000, 2000), vbGreen
        'Picture1.Refresh
        SavePicture Picture1.Image, "c:\ss.bmp"
    End SubPrivate Sub Form_Load()
        Picture1.AutoRedraw = True
    End Sub
      

  2.   

    谢谢rainstormmaster(rainstormmaster)
    根据你的指点,偶把picturebox的AutoRedraw属性改成True后,问题就解决了.
    能再详细说一下原理吗?
      

  3.   

    当你在Picture1中使用了Line、Pset之类的方法后 Picture1.Picture<>Picture1.Image
    顾名思义:Picture1.Picture指的是Picture1的图片对象,而Picture1.Image就是指的Picture1的当前图像。
      

  4.   

    AutoRedraw与Image/Picture属性的关联
      我们发现,在Form或PictureBox中有一个Picture属性物件,另外还有一个Image属性物
    件,Picture物件应该很清楚,它是用来存放图形资讯的,可是Image呢?它也是用来存
    图形资讯,但二者不相同;Image的影像是在记忆体中、看不见的影像,这看不见的影像
    对映着我们在萤上看见的影像(我们见到的是Picture物件之影像)。也就是说一共有两份
    影像,一份在记体看不见的(Image),另一份看得见(Picture)。而AutoRedraw是作为切
    换这二者之机制,当AutoRedraw设为False时,在上面的绘图会影响Picture,而且会立
    刻让我们看到绘图的果结果,此时Form/PictureBox的hdc是Picture的Device Context
    Handle。而AutoRedraw设为true时,所有绘图动作是在Image上做的,所以我们发现萤幕
    上没有绘图之变化,而此时Form/PictureBox的hdc是Image的Device Context Handle(如
    果您在AutoRedraw为true与False时各别列印hdc来看,两个hdc的值会不相同),而画面
    上的变化是直到我们用Refresh指令时,才见得着。事实上Refresh 的指令做了以下的动
    作: Set Obj.Picture = Obj.Image (Obj为Form或PictureBox);即使用看不见的那份
    Image影像来覆盖Picture的影像。  这有什麽用呢?当我们使用Set Form1.Picture = LoadPicture("mypic.bmp") 後,这
    mypic.bmp会同时指定给Form1的Image与Picture,而我们如果在AutoRedraw=False的情
    况下绘图,所有的绘图会立刻显示,下个Refresh则所有方才的绘图会被Image的影像所
    还原,因Image内的影像和Picture未绘图前的影像相同,所以好像图又回复原状了。相
    对的,如果们想画一个图,而画的步骤有好几步,如果希望全部画完後才一口气显示,
    那麽,就只有设AutoRedraw为True,那所有的绘图都针对Image来做,不会显示於画面,
    当全画好了,就下一个Refresh的指令,就把Image的影像Copy到Picture上,而我们就能
    见着啦。另外,我们如果绘图於Picture上(非Image上,即设AutoRedraw = False),当
    有其他的Window盖住我们的Window,而後再移开时,会发现方才的绘图不见了,相反的
    当AutoRedraw设为True时,不管是Resize或重新Paint,都会拿记忆体的那份图来画,
    所以别的Window移开时,我们Window上的绘图都还在,没有消失(所以这才叫AutoRedraw)