首页 | 社区 | 博客 | 招聘 | 文章 | 新闻 | 下载 | 读书 | 代码
亲,您未登录哦! 登录 | 注册

使用vb访问BMP位图,如何读取位图分辨率

打印文章

分享到:
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" _

(ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) _  
As Long  
Private Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, _  
ByVal dwCount As Long, lpBits As Any) As Long  
  
Private Type BITMAP  
bmType As Long  
bmWidth As Long  
bmHeight As Long  
bmWidthBytes As Long  
bmPlanes As Integer  
bmBitsPixel As Integer  
bmBits As Long  
End Type  
  
Private Sub Command1_Click()  
Dim hBitmap As Long  
Dim res As Long  
Dim bmp As BITMAP  
Dim byteAry() As Byte  
Dim totbyte As Long, i As Long  
hBitmap = Picture1.Picture.Handle  
  
res = GetObject(hBitmap, Len(bmp), bmp) '取得BITMAP的结构  
  
totbyte = bmp.bmWidthBytes * bmp.bmHeight '总共要多少BYTE来存图  
ReDim byteAry(totbyte - 1)  
'将Picture1中的图信息存到ByteAry  
res = GetBitmapBits(hBitmap, totbyte, byteAry(0))  
  
Debug.Print "Total Bytes Copied :"; res  
Debug.Print "bmp.bmBits "; bmp.bmBits  
Debug.Print "bmp.bmBitsPixel "; bmp.bmBitsPixel '每相素位数  
Debug.Print "bmp.bmHeight "; bmp.bmHeight '以相素计算图象高度  
Debug.Print "bmp.bmPlanes "; bmp.bmPlanes  
Debug.Print "bmp.bmType "; bmp.bmType  
Debug.Print "bmp.bmWidth "; bmp.bmWidth '以相素计算图形宽度  
Debug.Print "bmp.bmWidthBytes "; bmp.bmWidthBytes '以字节计算的每扫描线长度  
End Sub  
  
位图信息头  
  
----  
  
BMP位图信息头数据用于说明位图的尺寸等信息。  
typedef struct tagBITMAPINFOHEADER{  
DWORD biSize; // 本结构所占用字节数  
LONGbiWidth; // 位图的宽度,以像素为单位  
LONGbiHeight; // 位图的高度,以像素为单位  
WORD biPlanes; // 目标设备的级别,必须为1  
WORD biBitCount// 每个像素所需的位数,必须是1(双色),  
// 4(16色),8(256色)或24(真彩色)之一  
DWORD biCompression; // 位图压缩类型,必须是 0(不压缩),  
// 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一  
DWORD biSizeImage; // 位图的大小,以字节为单位  
LONGbiXPelsPerMeter; // 位图水平分辨率,每米像素数  
LONGbiYPelsPerMeter; // 位图垂直分辨率,每米像素数  
DWORD biClrUsed;// 位图实际使用的颜色表中的颜色数  
DWORD biClrImportant;// 位图显示过程中重要的颜色数  
} BITMAPINFOHEADER;  

本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )

编程爱好者论坛

本栏最新文章