屏幕图像如何快速保存到数组当中?
我要用VB实现以下功能:
从屏幕的(x,y)坐标开始得到100*100像素大小内的屏幕的图像数据,本人用有form的的picturebox已经实现,但是我想把这个功能做成dll,不想带有form窗口,请问如何解决呢,再网上也看了一下,可能用到Createdibsection、CreateDIBSection和bitble函数,现在想请教大家这个dll如何用VB写呢,请给出具体的代码(VB的),能够解决我这个问题的给100分。
[解决办法]
我要用VB实现以下功能: (对问题进行了一些修正)
从屏幕的(x,y)坐标开始得到100*100像素大小内的屏幕的图像数据,然后把这些数据存到一个数组当中,本人用有form的的picturebox已经实现,但是我想把这个功能做成dll,不想带有form窗口,也就是不想使用picturebox,请问如何解决呢,再网上也看了一下,可能用到Createdibsection、CreateDIBSection和bitble函数,现在想请教大家这个dll如何用VB写呢,请给出具体的代码(VB的),能够解决我这个问题的给100分。
[解决办法]
大家帮帮忙啊!
[解决办法]
将图像保存到数组中,这个可以参考:
http://topic.csdn.net/u/20080202/15/76d09e72-27ee-4deb-a66a-03518ea2f003.html?1122400373
[解决办法]
你好,你给的例子我看了,还是存在使用picturebox的情况,我不想使用picturebox,请问有什么更好的办法吗?
[解决办法]
下面是 API-Guide 的例子,调用 GetDIBits 后的 bBytes 数组应该就是你要的数据
Private Const BI_RGB = 0&
Private Const DIB_RGB_COLORS = 0 ' color table in RGBs
Private Type BITMAPINFOHEADER '40 bytes
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Type RGBQUAD
rgbBlue As Byte
rgbGreen As Byte
rgbRed As Byte
rgbReserved As Byte
End Type
Private Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors As RGBQUAD
End Type
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function CreateDIBSection Lib "gdi32" (ByVal hdc As Long, pBitmapInfo As BITMAPINFO, ByVal un As Long, ByVal lplpVoid As Long, ByVal handle As Long, ByVal dw As Long) As Long
Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
Private Declare Function SetDIBitsToDevice Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal Scan As Long, ByVal NumScans As Long, Bits As Any, BitsInfo As BITMAPINFO, ByVal wUsage As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Dim iBitmap As Long, iDC As Long
Private Sub Form_Paint()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
'-> Compile this code for better performance
Dim bi24BitInfo As BITMAPINFO, bBytes() As Byte, Cnt As Long
With bi24BitInfo.bmiHeader
.biBitCount = 24
.biCompression = BI_RGB
.biPlanes = 1
.biSize = Len(bi24BitInfo.bmiHeader)
.biWidth = 100
.biHeight = 100
End With
ReDim bBytes(1 To bi24BitInfo.bmiHeader.biWidth * bi24BitInfo.bmiHeader.biHeight * 3) As Byte
iDC = CreateCompatibleDC(0)
iBitmap = CreateDIBSection(iDC, bi24BitInfo, DIB_RGB_COLORS, ByVal 0&, ByVal 0&, ByVal 0&)
SelectObject iDC, iBitmap
BitBlt iDC, 0, 0, bi24BitInfo.bmiHeader.biWidth, bi24BitInfo.bmiHeader.biHeight, GetDC(0), 0, 0, vbSrcCopy
GetDIBits iDC, iBitmap, 0, bi24BitInfo.bmiHeader.biHeight, bBytes(1), bi24BitInfo, DIB_RGB_COLORS
For Cnt = LBound(bBytes) To UBound(bBytes)
If bBytes(Cnt) < 50 Then
bBytes(Cnt) = 0
Else
bBytes(Cnt) = bBytes(Cnt) - 50
End If
Next Cnt
SetDIBitsToDevice Me.hdc, 0, 0, bi24BitInfo.bmiHeader.biWidth, bi24BitInfo.bmiHeader.biHeight, 0, 0, 0, bi24BitInfo.bmiHeader.biHeight, bBytes(1), bi24BitInfo, DIB_RGB_COLORS
DeleteDC iDC
DeleteObject iBitmap
End Sub
[解决办法]
该回复于2009-03-23 10:16:25被版主删除
[解决办法]
up
[解决办法]
为什么不用 IPictureDisp
[解决办法]
怎么使用IPictureDisp,请说说你的建议,最好有代码,谢谢!
[解决办法]
楼主怎么大号小号一起上阿.
-
只要有句柄,获取显示在picture上或者是屏幕上的图像都没有区别的.
前者是PICTURE.HDC,后者是GETDC(0)
[解决办法]
sendkeys"{PRTSC}"
再从剪贴板中提取你要的的图像,简单吧?