》》》高手请进:把一个VC的视频采集压缩程序改成VB的,压缩后生成的文件只有0字节
VC:
======================================
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO, FAR *LPBITMAPINFO, *PBITMAPINFO;
typedef struct tagBITMAPCOREINFO {
BITMAPCOREHEADER bmciHeader;
RGBTRIPLE bmciColors[1];
} BITMAPCOREINFO, FAR *LPBITMAPCOREINFO, *PBITMAPCOREINFO;
__declspec(dllexport) BOOL __stdcall MV_AVIFileOpen(int index,LPCTSTR lpszFileName, LPBITMAPINFO alpb, WORD wSkipRate);
---------------------------------------------------------------
m_pImageInfo = (BITMAPINFO *) new BYTE[sizeof( BITMAPINFO ) +
(256 * sizeof( RGBQUAD )) ];
if ( m_pImageInfo == NULL ) return ;
m_pImageInfo->bmiHeader.biSize = sizeof( BITMAPINFOHEADER );
m_pImageInfo->bmiHeader.biWidth = info.Width;
m_pImageInfo->bmiHeader.biHeight = info.Heigth;
m_pImageInfo->bmiHeader.biPlanes = 1;
m_pImageInfo->bmiHeader.biBitCount = info.nColor;
m_pImageInfo->bmiHeader.biCompression = BI_RGB;
m_pImageInfo->bmiHeader.biSizeImage = info.Length;
m_pImageInfo->bmiHeader.biXPelsPerMeter = 0;
m_pImageInfo->bmiHeader.biYPelsPerMeter = 0;
m_pImageInfo->bmiHeader.biClrUsed = (info.nColor <= 8) ? 256 : 0;
m_pImageInfo->bmiHeader.biClrImportant = (info.nColor <= 8) ? 256 : 0;
if(info.nColor==8)
{
for (UINT i = 0; i < 256; i++ )
{
m_pImageInfo->bmiColors[i].rgbBlue = (BYTE) 0;
m_pImageInfo->bmiColors[i].rgbGreen = (BYTE) 0;
m_pImageInfo->bmiColors[i].rgbRed = (BYTE) i;
m_pImageInfo->bmiColors[i].rgbReserved = 0;
}
}
char AviFileName[256];
sprintf(AviFileName,"cap%d.avi",FileIndex);
BOOL bOpen=MV_AVIFileOpen(0, AviFileName, m_pImageInfo, 1);
======================================
VB:
Public Type RGBQUAD
rgbBlue As Byte
rgbGreen As Byte
rgbRed As Byte
rgbReserved As Byte
End Type
Public Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors(0 To 256) As RGBQUAD
End Type
Public Const BI_RGB = &H0
Public Declare Function MV_AVIFileOpen Lib "MVAVI.dll" (ByVal Index As Integer, ByVal lpszFileName As String, alpb As BITMAPINFO, wSkipRate As Integer) As Boolean
Dim ImageInfo As BITMAPINFO
'MsgBox LenB(ImageInfo)
ImageInfo.bmiHeader.biSize = 40
......
Dim bOpen As Boolean
Dim fname As String
fname = "tmp1.avi"
bOpen = MV_AVIFileOpen(0, fname, ImageInfo, 1)
或者是:
Public Declare Function MV_AVIFileOpen Lib "MVAVI.dll" (ByVal Index As Integer, ByVal lpszFileName As String,ByVal alpb As Long, wSkipRate As Integer) As Boolean
Long改成Any也不行
bOpen = MV_AVIFileOpen(0, fname,byval VarPtr(ImageInfo), 1)