#include <atlimage.h>
unsigned long BMP2JPEG(const char* pUnZipData, unsigned long ulUnZipDataLen, std::string& jpgData)
{
unsigned long ulBufferLen = 0;
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, ulUnZipDataLen);
void* pData = GlobalLock(hGlobal);
memcpy(pData, pUnZipData, ulUnZipDataLen);
GlobalUnlock(hGlobal);
IStream* pStream = NULL;
if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) == S_OK)
{
CImage image;
if (SUCCEEDED(image.Load(pStream)))
{
IStream* pOutStream = NULL;
if (CreateStreamOnHGlobal(NULL, TRUE, &pOutStream) == S_OK)
{
image.Save(pOutStream, Gdiplus::ImageFormatJPEG);
HGLOBAL hOutGlobal = NULL;
GetHGlobalFromStream(pOutStream, &hOutGlobal);
LPBYTE pBits = (LPBYTE)GlobalLock(hOutGlobal);
ulBufferLen = (DWORD)GlobalSize(pBits);
char *pBuffer = new char[ulBufferLen];
memcpy(pBuffer, pBits, ulBufferLen);
jpgData = std::string(pBuffer, ulBufferLen);
delete pBuffer;
pBuffer = nullptr;
GlobalUnlock(hOutGlobal);
pOutStream->Release();
}
}
pStream->Release();
}
GlobalFree(hGlobal);
return ulBufferLen;
}
C++ BMP转JPG
最新推荐文章于 2024-08-29 11:17:14 发布