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 TypePublic Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors(0 To 256) As RGBQUAD
End TypePublic Const BI_RGB = &H0Public 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 BooleanLong改成Any也不行bOpen = MV_AVIFileOpen(0, fname,byval VarPtr(ImageInfo), 1)
======================================
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 TypePublic Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors(0 To 256) As RGBQUAD
End TypePublic Const BI_RGB = &H0Public 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 BooleanLong改成Any也不行bOpen = MV_AVIFileOpen(0, fname,byval VarPtr(ImageInfo), 1)
解决方案 »
- 如何拖动图片
- 我在窗口里添加了inet控件数组,下面的代码为什么出下控件数组"1"不存在,请高手援手
- 帮给看看.分数不够在加!.帮网友写的程序
- 怎样捕捉commondialog对话框,并自动填入文件名?
- 关于stream对象的小问题
- Vb难题—请大家踊跃指教!!!
- 如何在文本文件内进行内容修改!
- 一个关于Data Control的简单问题。~
- 我是在DataReport中,想动态显示控件,但在DataReport好像无法使用控件数组
- 我想把text9移到MSFlexGrid1的第5行,第1列,应该怎么做??
- 求救!!!
- web控件打开网页2.htm(有个frame的src是3.htm),3.htm使用document.write画出一个 ID="sourceEditor"的编辑框,怎么填写?
但哪里有问题我也说不出,最好向V130开发商要一个VB的进程调用MV_AVIFileOpen的例程。
类型的指针最好也用long
rgbBlue As Byte
rgbGreen As Byte
rgbRed As Byte
rgbReserved As Byte
End TypePrivate Type BITMAPINFOHEADER
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 TypePrivate Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors(0 To 256) As RGBQUAD
End TypePrivate Const BI_RGB = &H0
Private Declare Function MV_AVIFileOpen Lib "D:\Smart\vc\test8\Debug\test8.dll" (ByVal Index As Long, ByVal lpszFileName As String, ByVal alpb As Long, ByVal wSkipRate As Integer) As LongPrivate Sub Command1_Click()
Dim ImageInfo As BITMAPINFO
With ImageInfo
.bmiHeader.biSize = 40
.bmiHeader.biBitCount = 88
.bmiHeader.biHeight = 99
End With
Dim bOpen As Boolean
Dim fname As String
fname = "testfdsafdsafdsatmp1.avi"
bOpen = MV_AVIFileOpen(&H1234, fname, VarPtr(ImageInfo), &H1122)
End Sub俺写了个测试,在vc下debug跟踪没问题,传进来的都正确。
With aviSI
.fccType = mmioStringToFOURCC("vids", 0&) '// stream type video
.fccHandler = 0& '// default AVI handler
.dwScale = 1
.dwRate = 25 '// fps(1-30)
.dwSuggestedBufferSize = bInfo.bmiHeader.biSizeImage '// size of one frame pixels
Call SetRect(.rcFrame, 0, 0, bInfo.bmiHeader.biWidth, bInfo.bmiHeader.biHeight) '// rectangle for stream
End With
' create the stream
r = AVIFileCreateStream(pFile, ps, aviSI)怎样在回调函数中进行处理呢,不会每次在回调函数中销毁流再重建吧?
由于图像大小变化了,会引起指针越界的非法操作
http://topic.csdn.net/u/20080326/21/de484afd-ad90-48a0-938c-e3f8d6d8484d.html?seed=581811851