如何能把char* 转成safe array of Bytes
以前在处理图像时,是先把摄像头的内容直接转成jpg保存到硬盘,然后程序去读这个文件,这样效率太慢,想能不保存到本地,直接处理。
查了下提供的函数,可以传文件,也可以传image stream.
object.DecodeStream(FileStream)
FileStream: A Variant that contains a safe array of Bytes.
从摄像头取出的数据是:
char* m_pcImageMemory[0]; // camera memory - pointer to buffer
sample 提供的例子是:
//prepare the image stream
CString sFileName;
m_Edit1.GetWindowText( sFileName );
HANDLE hFile = ::CreateFile( sFileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if( hFile == INVALID_HANDLE_VALUE )
{
AfxMessageBox( _T("Cant open the file") );
return;
}
DWORD dwFileSize = ::GetFileSize( hFile, NULL );
BYTE* pBuf = new BYTE[dwFileSize];
DWORD dwNumberOfBytesRead ;
if( !::ReadFile(hFile, pBuf, dwFileSize, &dwNumberOfBytesRead, NULL) )
{
AfxMessageBox( _T("Cant read the file") );
return;
}
::CloseHandle( hFile );
CComVariant var;
var.vt = VT_ARRAY | VT_UI1;
var.parray = SafeArrayCreateVector( VT_UI1, 0, dwFileSize );
if( !var.parray ) return ;
//lock safe array
BYTE* pSaBuf=NULL;
if( SUCCEEDED(SafeArrayAccessData(var.parray, (void HUGEP**)&pSaBuf)) )
{
//copy image into the safe array
memcpy( pSaBuf, pBuf, dwFileSize );
//unlock safe array
SafeArrayUnaccessData( var.parray );
}
//find barcodes in the image stream (doesnt use any file)
hr = pIBarcodeDecoder->DecodeStream( var );
问题是如何能把char* 转成safe array of Bytes