vb 屏幕区域截图计算

来源:百度知道 编辑:UC知道 时间:2024/06/16 22:57:37
我现在想做个.dll(由另一个程序调用);目的是截取hwnd句柄的50,50,100,100的一个小区域图片,然后对这个图片像素进行各像素点灰化,然后返回被灰化的图片的某点颜色值,在这个过程中因为是被另一个程序调用的,所以不想有不需要的vb弹出窗口出现,各位大人来帮忙吧(有分追加)
下面这个程序是我找的灰化过程,如果您不想自己弄带厥值的,就用它也行。有个小问题,不知道为什么我这个小程序非要用command_click激活才能有结果,换成form_load就不行,报错,说是r值不对,真的不明白,大大顺便帮忙解释下
Private Sub Command1_Click()
For i = 1 To Picture1.ScaleHeight Step 15
For j = 1 To Picture1.ScaleWidth Step 15
aaa = Picture1.Point(j, i)
R = (aaa Mod 256) '取得红色值
G = (aaa Mod 65536) \ 256 '取得绿色值
B = (aaa Mod 16777216) \ 65536 '取得蓝色值
bbb = R / 3 + G / 3 + B / 3 '取得灰度值
Picture2.PSet (j, i), RGB(bbb, bbb, bbb)
Next j
Next i
endsub

★★★★★

这个有些麻烦,简单的方法就是要用时就GetPixel (先GetDC)
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

dim hdc
hdc=GetDC(hwnd)
color=GetPixel(50,50,hdc)
'得到color了,自己处理吧
ReleaseDC hwnd,hdc


我测试了,没有说R不对啊。可以详细地说说吗?

试试看在你的代码之前加上
Picture2.AutoRedraw = true
Dim r,g,b,aaa,bbb

这样改即可:

Private Sub Form_load()
picture1.AutoRedraw=true
picture2.AutoRedraw=true
For i = 1 To Picture1.ScaleHeight Step 15
For j = 1 To Picture1.ScaleWidth Step 15
aaa = Picture1.Point(j, i)
R = (aaa Mod 256) '取得红色值
G = (aaa Mod 65536) \ 256 '取得绿色值
B = (aaa Mod 16777216) \ 65536 '取得蓝色值
bbb = R / 3