VB图像处理之像素的获取和输出
来源:互联网
作者:西部数码
时间:2008-04-09
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
有些性急的朋友说不定已经把程序贴到工程里试用了,可是会发现根本不能输出图像。这是因为当你用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不是就可以了吗?
不错,如果只是要贴个图,确实不用这么麻烦,可是,我们后面要说的图像处理部分将会用到前门得到的像素值。所以,这只是一个开始,我真正要讲的东西还在后面呢。请大家继续关注。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



