完整的bmp和光标文件已经存贮在内存中, 请教一下如何从内存中载入BMP图像和光标?
解决方案 »
- 多个数据库版本访问会不会冲突?
- 线程间通信问题
- 请教:如何实现图象控件中图象的放大缩小功能
- 二维数组的动态分配出问题!
- 急,用Socket传输的数据接受端要不要自己进行数据验证?
- 有谁的程序在多cpu,或超线程cpu下运行吗??网络通讯在超线程下要如何处理呢
- 菜鸟级问题:会写队列,堆栈的程序的请进
- 如何生成证书申请数据(即P10数据)
- 关于如何在VB中调用VC做的EXE程序,并取得EXE所获得的数据的问题?
- vc++ 6.0工程转为vs2013后编译提示th32.lib无法打开
- 请教一下如何从内存中载入BMP图像和光标?
- 根据鼠标在对话框上的位置来显示图片的问题,在不同的分辨率会得到不同的值和位置?
BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );
http://shukaiyang.myweb.hinet.net/dibtips/index.html
从内存中载入光标
http://www.codeproject.com/bitmap/ColorCursorFromBmp.asp
HBITMAP CreateBitmapObjectFromDibFile (HDC hdc, PTSTR szFileName)
{
BITMAPFILEHEADER * pbmfh ;
BOOL bSuccess ;
DWORD dwFileSize, dwHighSize, dwBytesRead ;
HANDLE hFile ;
HBITMAP hBitmap ;
// Open the file: read access, prohibit write access
hFile = CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL) ;
if (hFile == INVALID_HANDLE_VALUE)
return NULL ;
// Read in the whole file
dwFileSize = GetFileSize (hFile, &dwHighSize) ;
if (dwHighSize)
{
CloseHandle (hFile) ;
return NULL ;
}
pbmfh = malloc (dwFileSize) ;
if (!pbmfh)
{
CloseHandle (hFile) ;
return NULL ;
}
bSuccess = ReadFile (hFile, pbmfh, dwFileSize, &dwBytesRead, NULL) ;
CloseHandle (hFile) ;
// Verify the file
if (!bSuccess || (dwBytesRead != dwFileSize)
|| (pbmfh->bfType != * (WORD *) "BM")
|| (pbmfh->bfSize != dwFileSize))
{
free (pbmfh) ;
return NULL ;
}
// Create the DDB
hBitmap = CreateDIBitmap (hdc,
(BITMAPINFOHEADER *) (pbmfh + 1),
CBM_INIT,
(BYTE *) pbmfh + pbmfh->bfOffBits,
(BITMAPINFO *) (pbmfh + 1),
DIB_RGB_COLORS) ;
free (pbmfh) ;
return hBitmap ;
}
HGLOBAL m_hGlobal = GlobalAlloc( GPTR, bmpLen);//bmpLen=内存中bmp数组长度
VOID* global_addr = GlobalLock( m_hGlobal );
memcpy( global_addr, bmpAddr, bmpLen); //bmpAddr=内存中bmp数组地址
CreateStreamOnHGlobal( m_hGlobal, true, &istream );Bitmap* bitmap = new Bitmap( istream, false );
cursor的载入看来大家都没什么好办法,干脆从内存存到文件,再通过LoadImage函数载入算了:(