截取全屏并保存到BMP的模块
来源:互联网 发布:正在移除icloud数据 编辑:程序博客网 时间:2024/06/05 20:32
'关键在于输出到文件的时候,既然可以得到二进制数组了,就可以做很多事情了,哈哈
'可以压缩数组 / 可以转换成JPG / 可以保存到剪贴板 。。。。。。
Option Explicit
Public Type BITMAPFILEHEADER
bfType(0 To 1) As Byte
bfSize As Long
bfReserved1 As Integer
bfReserved2 As Integer
bfOffBits As Long
End Type
Public 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
Public Type RGBQUAD
rgbBlue As Byte
rgbGreen As Byte
rgbRed As Byte
rgbReserved As Byte
End Type
Public Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors As RGBQUAD
End Type
Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Declare Function CreateDIBSection Lib "gdi32" (ByVal hdc As Long, pBitmapInfo As BITMAPINFO, ByVal un As Long, lplpVoid As Long, ByVal handle As Long, ByVal dw As Long) As Long
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
Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Long, ByVal Source As Long, ByVal Length As Long)
Public Const DIB_RGB_COLORS = 0 ' " color table in RGBs
Public Const SRCCOPY = &HCC0020 '" (DWORD) dest = source
Public Function CopyScreenToBMP(ByVal szfile As String) As Boolean
Dim w As Long, h As Long
Dim scrDC As Long
Dim DIB As Long, m_DC As Long
Dim BmpInfo As BITMAPINFO
Dim BmpFileHead As BITMAPFILEHEADER
Dim pData As Long
Dim buff() As Byte
Dim old As Long
Dim L As Long
'"取屏幕 高宽
w = Screen.Width / 15
h = Screen.Height / 15
'"准备内存DC
m_DC = CreateCompatibleDC(0&)
If m_DC = 0 Then
CopyScreenToBMP = False
Exit Function
End If
'"填充DIB的BMP结构
With BmpInfo.bmiHeader
.biBitCount = 24
.biPlanes = 1
.biHeight = h
.biWidth = w
.biSize = 40 '"本结构长度
End With
DIB = CreateDIBSection(m_DC, BmpInfo, DIB_RGB_COLORS, pData, 0, 0)
'"分配内存
If DIB = 0 Then
CopyScreenToBMP = False
Exit Function
End If
old = SelectObject(m_DC, DIB)
'"拷屏
scrDC = GetDC(0)
BitBlt m_DC, 0, 0, w, h, scrDC, 0, 0, SRCCOPY
'"分配内存
L = w * h * 3
'"补足4的倍数
If L Mod 4 <> 0 Then L = L + (4 - L Mod 4)
ReDim buff(1 To L) As Byte
'"取像素数据
CopyMemory VarPtr(buff(1)), pData, L
'"释放资源
SelectObject m_DC, old
DeleteObject DIB
DeleteDC m_DC
'"填充BMPFILE
With BmpFileHead
'"BM标志
.bfType(0) = Asc("B"): .bfType(1) = Asc("M")
.bfSize = Len(BmpFileHead) + Len(BmpInfo) + L
.bfOffBits = Len(BmpFileHead) + Len(BmpInfo)
End With
'"写入文件
L = FreeFile()
Open szfile For Binary As L
'"写入文件头
Put L, , BmpFileHead
Put L, , BmpInfo
'"写入实际像素
Put L, , buff()
Close L
CopyScreenToBMP = True
End Function
- 截取全屏并保存到BMP的模块
- 截图:截取当前程序的界面,并保存到bmp图片中。
- 现有一张bmp图片,VC中如何截取图片的指定的一部分并保存
- wince下全屏截图并保存为bmp格式
- 截屏,并将截取的图片保存到相册中
- mfc 截取桌面 并保存为 bmp 图片
- Java实现全屏截取并保存成图片
- 将桌面显示获取并保存到bmp中
- 将桌面显示获取并保存到bmp中
- 保存bmp到文件
- 截取指定区域的并保存图片
- 截取手机屏幕中某个View的图像,并以图片形式保存到本地相册
- 全屏抓图,依次保存.bmp,MFC
- ios 截取当前view并保存到相册
- html2canvas截取界面html并保存到本地
- 屏幕截取并且保存为bmp
- 安卓开发截取当前屏幕图片及截取整个ListView图片并保存到本地
- 保存DC到BMP文件
- JSP生成静态页-Tomcat提高性能之道
- 我该做点什么?
- 朱敏:从插队知青到硅谷英雄
- visual studio 2005有哪些版本
- STL排序详解--ericlee211的blog
- 截取全屏并保存到BMP的模块
- 全排列生成算法与组合数排列求法
- sql 优化的53个规则
- WebEx 创始人朱敏做企业家的七个理论(非常实用)
- 为WindowsXPEmbedded创建自定义组件
- Linux文件分卷压缩和合并
- 关于FTP的学习
- 在.net中连接ACCESS数据库
- JdbcTemplate查询