手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>VB>列表

VB图像处理之像素的获取和输出

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

Dim bi24BitInfo As BitMapInfo '定义BMP信息
   可以看出,我在输入和输出中使用了两个不同的动态数组ColVal()和ColOut(),这么做是有道理的,因为我们不只是为了输入和输出图像,中间还要对像素进行处理。包括图像缩放、色彩调整、锐化、柔化等等处理,使用两个不同的数组来分别存放数据更有利于程序的实现。

   有些性急的朋友说不定已经把程序贴到工程里试用了,可是会发现根本不能输出图像。这是因为当你用DIBGET获得的图像还在ColVal() 中呢,需要把它们放到ColOut()这个数组中去,DIBPUT这个过程才能起作用。

   这里再给出一个用于数组整体移动数据的过程:

Public Sub CopyData(ByVal W As Long, ByVal H As Long)
  Dim Length As Long
  Dim I As Long
  Dim L As Long
  I = Bits \ 8
  L = I - 1
  Length = (W 1&) * (H 1&) * I
  ReDim ColOut(L, W, H)
  CopyMemory ColOut(0, 0, 0), ColVal(0, 0, 0), Length
End sub
   API定义:

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal ByteLen As Long)
   这时,我们就可以来试一下效果了:

   把你的显示器调到32位色。

   将前面的所有API和变量定义全部贴到一个新建的模块里

   新建一个窗体,加两个PICTURE控件:pictrue1 ,picture2 一个按钮command1

   在pictrue1中加载一个图片

   在command1中写如下代码:

sub command1_click()
  With picture1
   .ScaleMode=3
   .BorderStyle=0
   DibGet .hdc,0,0,.scalewidth,.scaleheight
  End With
  CopyData InPutHei ,InPutWid
  picture2.AutoRedraw=True
  DibPut picture2.hdc
  picture2.refresh
end sub
   运行一下,按钮按下,pictreu1中的图片就立刻显示到了picture2中。

   这时,你可能会说,弄了这么半天就贴个图?用PaintPicture不是就可以了吗?

   不错,如果只是要贴个图,确实不用这么麻烦,可是,我们后面要说的图像处理部分将会用到前门得到的像素值。所以,这只是一个开始,我真正要讲的东西还在后面呢。请大家继续关注。

上一篇: VB实现图像在数据库的存储与显示
下一篇: Visual Basic 深度下潜之海蛇缠绕

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!