下面的代码中,对CFILE的操作,正确吗?可以这样这次的读取接着上次的吗?HBITMAP CreateDIBsectionFromDibFile (PTSTR szFileName)
{
BITMAPFILEHEADER bmfh ;
BITMAPINFO * pbmi ;
BYTE * pBits ;
BOOL bSuccess ;
DWORD dwInfoSize, dwBytesRead ;
HANDLE hFile ;
HBITMAP hBitmap ;
// Open the file: read access, prohibit write access
hFile = CreateFile (szFileName, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL) ;
if (hFile == INVALID_HANDLE_VALUE)
return NULL ;
// Read in the BITMAPFILEHEADER
bSuccess = ReadFile (hFile, &bmfh, sizeof (BITMAPFILEHEADER),
&dwBytesRead, NULL) ;
if (!bSuccess || (dwBytesRead != sizeof (BITMAPFILEHEADER))
|| (bmfh.bfType != * (WORD *) "BM"))
{
CloseHandle (hFile) ;
return NULL ;
}
// Allocate memory for the BITMAPINFO structure & read it in
dwInfoSize = bmfh.bfOffBits - sizeof (BITMAPFILEHEADER) ;
pbmi = malloc (dwInfoSize) ;
bSuccess = ReadFile (hFile, pbmi, dwInfoSize, &dwBytesRead, NULL) ;
if (!bSuccess || (dwBytesRead != dwInfoSize))
{
free (pbmi) ;
CloseHandle (hFile) ;
return NULL ;
}
// Create the DIB Section
hBitmap = CreateDIBSection (NULL, pbmi, DIB_RGB_COLORS, &pBits, NULL, 0) ;
if (hBitmap == NULL)
{
free (pbmi) ;
CloseHandle (hFile) ;
return NULL ;
}
// Read in the bitmap bits
ReadFile (hFile, pBits, bmfh.bfSize - bmfh.bfOffBits, &dwBytesRead, NULL) ;
free (pbmi) ;
CloseHandle (hFile) ;
return hBitmap ;
}
解决方案 »
- WinAPI MoveToEx()LineTo()实现鼠标画直线和矩形框的问题
- 请教:怎样编程实现选中其它程序的单选按钮?
- 如何在网页中在不刷新页面的情况下,刷新ACTIVE控件窗口?
- 用vs2008制作安装包的一点疑问,恳请各位朋友指点一下
- 自己写的一个图形处理软件,打开一张图片,然后对此图片进行删除,移动,重命名时都会报错:此文件正在被使用.....怎样解决?
- 如何得到List Control控件中高亮显示的(即被选中的)那条记录的nitem值?
- 请教:多线程调试问题!!
- 关于程序模块化的问题
- 1000分求程序原码(可连接2个客户端的服务器程序)
- 求一个用api的socket的Sample!
- CAsyncSocket的子类CliSocket已经new了一个实例,当运行到Connect("192.168.1.20", 6100)时报出‘该内存不能为read’。该怎样解决?
- 关于画笔的设置
//如果是载入位图,还可以直接使用 LoadImage: HBITMAP hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(), szFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);