发新话题
打印

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

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

** Declare Function GetObject Lib "gdi32" Alias "GetObjectA" _

(ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) _  
As Long  
** Declare Function GetBitmapBits Lib "gdi32" (ByVal hBitmap As Long, _  
ByVal dwCount As Long, lpBits As Any) As Long  
  
** 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  
  
** 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;

TOP

发新话题