我想对picturebox内的图像实现镜像,翻转,灰度转换以及反色等操作。具体到实现水平镜像功能的时候,我用paintpicture。
Public Sub comMirrorX()
  '设 sx, sy, sw, sh为源左上角坐标,宽, 高
  'Picture1是从外部加载的图像,visible设为false
  'Picture2用于显示
...  Dim sw, sh, sx, sy
  sw = Picture1.ScaleWidth
  sh = Picture1.ScaleHeight
  sx = sw
  sy = 0
  Picture2.Picture = LoadPicture("")
  Picture2.PaintPicture Picture1,0,0,sw,sh,sx,sy,-sw,sh,vbSrcCopy
...
                           
End Sub  但是这样,只能实现一次性的镜像,也就是镜像以后,如果再次发出命令,回不到原图。我想在上面Picture2.PaintPicture语句后面添加
  Picture1.Picture = LoadPicture("")
  Picture1.PaintPicture Picture2,0,0,sw,sh,0,0,sw,sh,vbSrcCopy
  运行时会出现“无效图片“ 的错误。  然后我考虑用Clipboard的功能。  Clipboard.SetData Picture2.Picture, 2
  Picture1.Picture = Clipboard.GetData(2)
  还是会出现“无效图片“  刚开始用VB,不懂这些问题。还有,如何实现反复的镜像,敬请各位赐教。
  
  

解决方案 »

  1.   

    Picture1.PaintPicture Picture2.Picture,0,0,sw,sh,0,0,sw,sh,vbSrcCopy
      

  2.   

    Picture1.PaintPicture Picture2.Image,0,0,sw,sh,0,0,sw,sh,vbSrcCopy
      

  3.   

    两位,你们说的方法不行啊。PaintPicture方法的第一个属性用PictureBox对象,或者PictureBox的Picture属性都可以。
      

  4.   

    这样应该可以了
    Picture1.Picture = Picture2.Image
      

  5.   

    翻转的实现我是通过柯达提供的控件实现的,windows里面自带有,vb可以附加进去
      

  6.   

    picturebox 的picture属性如果你不去 loadpicture是不会变的
    用于表示当前图像的属性是image,不是picture