当前位置:编程学习 > VB >>

VB切割图片

/*Title:VB切割图片

*Author:Insun

*Blog:http://yxmhero1989.blog.163.com

*From:http://www.4safer.com/forum.php?mod=post&action=edit&fid=51&tid=423&pid=1601&page=1

*/


 

0x01.切割一个Container中的图片

  1. Private Sub Form_Activate()


  2. 详细阅读PaintPicture的说明就可了解,在来源图和目的图中,

  3. 可以指定某个特定区域来绘图,亦即可以将图片切割或放大,缩小

  4. Picture1.PaintPicture Picture, 10, 10, 1000, 1000, 0, 0, 500, 500
  5. End Sub

  6. Private Sub Form_Load()

  7. AutoRedraw = True

  8. 以下路径可能要修改

  9. Picture = LoadPicture("C:g_download.bmp")

  10. With Picture1

  11. .Left = 1000

  12. .Top = 1000

  13. .Width = 1100

  14. .Height = 1100

  15. .AutoRedraw = True

  16. End With

  17. End Sub
复制代码

QQ截图未命名1.jpg

PaintPicture是自VB4以后新提供的图形图像处理方法,它的基本功能是图像块传输,在以前的VB版本中要产生块传输效果,需采用WindowsGDI中的块传输函数BitBltAPI调用。PaintPicture正是VB中用来代替BitBltAPI调用的简单而方便的方法。它能快速地将两幅位图进行合并;能将位图的全部或某一部分快速剪切并粘贴到其它地方;并能将位图自动延伸或压缩以适应新的环境;能在屏幕上不同位置之间、屏幕与内存之间传递位图;它采用32位三元光栅操作代码(ROP),在源位图、选定的刷子位图和目标位图之间进行颜色组合,生成目标位图中的最终颜色,它将13个常用的ROPR操作以内部常量形式给出,不需任何声明,不用理会其32位参数值。
基本格式:
Object.PaintPicturepicture,x1,y1,width1,height1,x2,y2,Width2,height2,opcode

其中Object可以为窗体或PictureBox控件Picture可以为BMP、Dib、Ico、Wmf、Emf等格式的图片
  X1、Y1、Width1、height1为目标位图的参数
  X2、Y2、Width2、height2为源位图的参数
 opcode表示源图与目标位图(或刷子位图)的组合关系,该参数与BitBlt中dwRop参数含义相同。
  VB4为opcode定义了13个内部常量:
  vbDstInvert:目标位图取反
  vbSrcCopy:源位图直接覆盖目标位图
  vbSrcAnd:源位图与目标位图进行“与”操作
 bSrcInvert:源位图与目标位图进行“异或”操作
  vbSrcPaint:源位图与目标位图进行“或”操作
  vbNotSrcCopy:源位图取反
  vbSrcErase:目标位图取反,再与源位图进行“与”操作
  vbNotSrcErase:源位图与目标位图进行“或非”操作
  vbMergePaint:源位图取反,再与目标位图进行“或”操作
  此外,与刷子位图有关的常量是vbMergeCopy、vbPatCopy、vbPatInvert和vbPatPaint,这13个内部常量可以在菜单View/ObjectBrowser/VB-VisualBasicobjectsandprocedures/RasterOpConstants中列出。
  巧用PainPicture方法,结合控件属性,可以方便地产生许多常见的图像切换效果,如我们在多媒体作品及电视中常见的图像旋转引入、翻转、飞入、滑入、弹出、淡入淡出、隐现等动画效果。举例:图像滑入(Wipe)效果的实现
  在滑入效果中,新图像慢慢逐渐覆盖旧图像,就象在墙上展于一幅卷成筒状的画。

用PaintPicture方法来实现图像的翻转,比较容易(需要API—StretchBlt的支持)。
其语法规则为:object.PaintPicture Picture, x1, y1, width1, height1, x2, y2, width2, height2, (opcode)。

以下是几个简单变换的例子:

水平翻转:Picture1.PaintPicture Picture1.Picture, Picture1.ScaleWidth, 0, -1 * Picture1.ScaleWidth, Picture1.ScaleHeight

垂直翻转:Picture1.PaintPicture Picture1.Picture, 0, Picture1.ScaleHeight, Picture1.ScaleWidth, -1 * Picture1.ScaleHeight

旋转180度:Picture1.PaintPicture Picture1.Picture, Picture1.ScaleWidth, Picture1.ScaleHeight, -1 * Picture1.ScaleWidth, -1 * Picture1.ScaleHeight

缩 小:Picture1.PaintPicture Picture1, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, -Picture1.ScaleWidth, -Picture1.ScaleHeight

放 大:Picture1.PaintPicture Picture1, Picture1.ScaleWidth, Picture1.ScaleHeight, -2 * Picture1.ScaleWidth, -2 * Picture1.ScaleHeight


  0x02.PictureClip 控件为保存多图片源提供了有效的机制。可创建一个包含应用程序所需要的源位图来代替多个位图或图标。需要显示单个图标时,使用 PictureClip 控件在该源位图中选择包含该图标的区域。

位图裁剪控件PictureClip控件

位图裁剪控件pictureclip(在MS pictureclip controls 6.0中): 它主要只有三个属性:
Cols--裁剪列数(形如"皿");
Rows--裁剪行数(形如"目")。
GraphicCell属性:存放各个裁剪图的数组,通过引用格式: "pictureclip1.graphiccell(下标)" 来引用每一幅经过裁剪得到的图片(其下标从0开始)。
用个例子来说明:

  1. Dim i As Integer
  2. Private Sub Form_Load() Rows = 6恰好,此处用image比Picture有2个好处
  3. i = 0
  4. i = i + 1
  5. Picture1(i).Picture = PictureClip1.GraphicCell(i)
  6. Image1(0).Picture = PictureClip1.GraphicCell(0)
  7. Image1(1).Picture = PictureClip1.GraphicCell(1)
  8. Image1(2).Picture = PictureClip1.GraphicCell(2)
  9. Image1(3).Picture = PictureClip1.GraphicCell(3)
  10. Image1(4).Picture = PictureClip1.GraphicCell(4)
  11. End Sub
复制代码

QQ截图未命名2.jpg

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,