如果我要载入的资源不是从文件中的也不是资源文件,而是在内存缓冲区的信息,如何使用LoadImage载入.注要求使用LoadImage不使用第三方程序
问题变为
1.有没有办法产生内存文件,直接通过文件名访问那种,并写内存信息到文件中.(不要产生暂时文件)
2.有没有办法动态产生资源文件,并把内存中的信息写入资源文件中
问题变为
1.有没有办法产生内存文件,直接通过文件名访问那种,并写内存信息到文件中.(不要产生暂时文件)
2.有没有办法动态产生资源文件,并把内存中的信息写入资源文件中
我的目标就是,比入从网上传过一个bmp文件,我要直接转换为HBITMAP文件.我不想去解析BMP文件,想
知道是否相关的API函数
HBITMAP Helper_CreateBitmapFromBuffer(LPBYTE pBuffer, DWORD cbSize)
{
HBITMAP hBmp=NULL;
HDC hdc=NULL;
HPALETTE hPal=NULL,hOldPal=NULL;
BITMAPFILEHEADER *pbmfHeader=(BITMAPFILEHEADER *)pBuffer;
DWORD dwOffset=sizeof(BITMAPFILEHEADER);
// File type should be 'BM' BITMAPINFOHEADER *pbmiHeader = (LPBITMAPINFOHEADER)(pBuffer+dwOffset) ;
BITMAPINFO * pbmInfo = (LPBITMAPINFO)(pBuffer+dwOffset) ;
// If bmiHeader.biClrUsed is zero we have to infer the number
// of colors from the number of bits used to specify it.
int nColors = pbmiHeader->biClrUsed ? pbmiHeader->biClrUsed :
1 << pbmiHeader->biBitCount; LPVOID lpDIBBits;
if (pbmfHeader->bfType != ((WORD) ('M' << 8) | 'B')) return NULL;
if( pbmInfo->bmiHeader.biBitCount > 8 )
lpDIBBits = (LPVOID)((LPDWORD)(pbmInfo->bmiColors + pbmInfo->bmiHeader.biClrUsed) +
((pbmInfo->bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));
else
lpDIBBits = (LPVOID)(pbmInfo->bmiColors + nColors);
hdc=GetDC(NULL);
// Create the palette
if( nColors <= 256 )
{
UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * nColors);
LOGPALETTE *pLP = (LOGPALETTE *) malloc(nSize);
int i;
pLP->palVersion = 0x300;
pLP->palNumEntries = nColors;
for( i=0; i < nColors; i++)
{
pLP->palPalEntry[i].peRed = pbmInfo->bmiColors[i].rgbRed;
pLP->palPalEntry[i].peGreen = pbmInfo->bmiColors[i].rgbGreen;
pLP->palPalEntry[i].peBlue = pbmInfo->bmiColors[i].rgbBlue;
pLP->palPalEntry[i].peFlags = 0;
}
hPal=CreatePalette(pLP);
free(pLP);
hOldPal=(HPALETTE)SelectObject(hdc,hPal);
RealizePalette(hdc);
}
hBmp = CreateDIBitmap( hdc, // handle to device context
pbmiHeader, // pointer to bitmap size and format data
CBM_INIT, // initialization flag
lpDIBBits, // pointer to initialization data
pbmInfo, // pointer to bitmap color-format data
DIB_RGB_COLORS); // color-data usage
if( hPal )
{
SelectObject(hdc,hOldPal);
DeleteObject(hPal);
}
ReleaseDC(NULL,hdc);
return hBmp;
}
HICON Helper_CreateIconFromBuffer