通过视频捕捉设备抓的一个实时的图像,现在可以把它保存为bmp文件,
怎样保存为一个jpg文件?long cbBuffer=0;
HRESULT hr=pGrabber->GetCurrentBuffer(&cbBuffer,NULL);
BYTE *pBuffer=new BYTE[cbBuffer];
hr=pGrabber->GetCurrentBuffer(&cbBuffer,(long*)pBuffer);
//pBuffer中有实时抓的图数据
WriteImageFile(pBuffer,cbBuffer,cts);//此函数是写入bmp文件
怎样保存为一个jpg文件?long cbBuffer=0;
HRESULT hr=pGrabber->GetCurrentBuffer(&cbBuffer,NULL);
BYTE *pBuffer=new BYTE[cbBuffer];
hr=pGrabber->GetCurrentBuffer(&cbBuffer,(long*)pBuffer);
//pBuffer中有实时抓的图数据
WriteImageFile(pBuffer,cbBuffer,cts);//此函数是写入bmp文件
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, nSize);
if(hGlobal == NULL)
{
return(FALSE);
}
void* pData = GlobalLock(hGlobal);
memcpy(pData, pBuffer, nSize);
GlobalUnlock(hGlobal);
IStream* pStream = NULL;
if(CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) == S_OK)
{
HRESULT hr;
if((hr = OleLoadPicture(pStream, nSize, FALSE, IID_IPicture, (LPVOID *)&m_pPict)) == E_NOINTERFACE)
{
return(FALSE);
}
else // S_OK
{
pStream->Release();
pStream = NULL;
bResult = TRUE;
}
}
return(bResult);
}
去下XIMAGE来做吧。
static Bitmap *FromBITMAPINFO(
const BITMAPINFO *gdiBitmapInfo,
VOID *gdiBitmapData
);
最后用Save函数保存
Save(
const WCHAR *filename,//保存的文件名
const CLSID *clsidEncoder,//保存使用的编码器,如果保存为JPEG就使用JPEG的编码器
const EncoderParameters *encoderParams//一般为空
);
编码器的获得可以使用函数GetEncoderClsid,比如
CLSID pngClsid;
GetEncoderClsid(L"image/jpeg", &pngClsid);
此外gdi+还支持以下几种图片格式
image/bmp
image/jpeg
image/gif
image/tiff
image/png
该函数的源码:int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes ImageCodecInfo* pImageCodecInfo = NULL; GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // Failure GetImageEncoders(num, size, pImageCodecInfo); for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j; // Success
}
} free(pImageCodecInfo);
return -1; // Failure
}
=====
当然可以
jpglib和jpglib2是不是一样的
http://www.codeguru.com/Cpp/G-M/bitmap/otherformats/article.php/c1731/