<请问>关于内存中的BMP在C++中的显示
<请教>关于内存中的BMP在C++中的显示
已知显示BMP代码如下, 问题在下面描述
1、从文件读取BMP文件
// 显示本地图片
CString FileName= "C:\\ceshi.bmp";
HBITMAP mybmp;
mybmp=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FileName,NULL,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
HBITMAP oldbmp;
CDC memdc;
CDC *dc=GetDC();
// CRect rect;
memdc.CreateCompatibleDC(dc);
GetClientRect(rect);
oldbmp = (HBITMAP)memdc.SelectObject(mybmp);
//显示图片
dc->BitBlt(20,20,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);
memdc.SelectObject(oldbmp);
ReleaseDC(dc);
上面代码能正确显示BMP到界面
问题:
请问, 如果我没有ceshi.bmp, 但是在内存中生成了 BITMAP bitmap 如何把这个bitmap显示到界面中呢.....
------解决方案--------------------
CDC memdc;
CDC *dc=GetDC();
// CRect rect;
memdc.CreateCompatibleDC(dc);
GetClientRect(rect);
oldbmp = (HBITMAP)memdc.SelectObject(mybmp);
//显示图片
dc->BitBlt(20,20,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);
memdc.SelectObject(oldbmp);
ReleaseDC(dc);
这段代码就可以
------解决方案--------------------
mybmp=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FileName,NULL,0,0,LR_LOADFROMFILE
------解决方案--------------------
LR_CREATEDIBSECTION);
把这句, 换成你的 在内存中生成的 BITMAP bitmap .
int SetDIBits(
HDC hdc, // handle to DC
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // starting scan line
UINT cScanLines, // number of scan lines
CONST VOID *lpvBits, // array of bitmap bits
CONST BITMAPINFO *lpbmi, // bitmap data
UINT fuColorUse // type of color indexes to use
);
可以把bitmap设置进兼容DC, 然后就一样了.
------解决方案--------------------
HBITMAP hbmp = NULL;
hbmp = CreateBitmapIndirect(pBitmap);
放到 剪贴板看看 对不对 !(绘图 +paste)
------解决方案--------------------
HBITMAP hbmp = NULL;
hbmp = CreateBitmapIndirect(pBitmap);
if( hbmp )
{
// move to Clipboard for test
OpenClipboard();
EmptyClipboard();
SetClipboardData(CF_BITMAP,hbmp); // not CF_DIB
CloseClipboard();
}
已知显示BMP代码如下, 问题在下面描述
1、从文件读取BMP文件
// 显示本地图片
CString FileName= "C:\\ceshi.bmp";
HBITMAP mybmp;
mybmp=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FileName,NULL,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
HBITMAP oldbmp;
CDC memdc;
CDC *dc=GetDC();
// CRect rect;
memdc.CreateCompatibleDC(dc);
GetClientRect(rect);
oldbmp = (HBITMAP)memdc.SelectObject(mybmp);
//显示图片
dc->BitBlt(20,20,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);
memdc.SelectObject(oldbmp);
ReleaseDC(dc);
上面代码能正确显示BMP到界面
问题:
请问, 如果我没有ceshi.bmp, 但是在内存中生成了 BITMAP bitmap 如何把这个bitmap显示到界面中呢.....
------解决方案--------------------
CDC memdc;
CDC *dc=GetDC();
// CRect rect;
memdc.CreateCompatibleDC(dc);
GetClientRect(rect);
oldbmp = (HBITMAP)memdc.SelectObject(mybmp);
//显示图片
dc->BitBlt(20,20,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);
memdc.SelectObject(oldbmp);
ReleaseDC(dc);
这段代码就可以
------解决方案--------------------
mybmp=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FileName,NULL,0,0,LR_LOADFROMFILE
------解决方案--------------------
LR_CREATEDIBSECTION);
把这句, 换成你的 在内存中生成的 BITMAP bitmap .
int SetDIBits(
HDC hdc, // handle to DC
HBITMAP hbmp, // handle to bitmap
UINT uStartScan, // starting scan line
UINT cScanLines, // number of scan lines
CONST VOID *lpvBits, // array of bitmap bits
CONST BITMAPINFO *lpbmi, // bitmap data
UINT fuColorUse // type of color indexes to use
);
可以把bitmap设置进兼容DC, 然后就一样了.
------解决方案--------------------
HBITMAP hbmp = NULL;
hbmp = CreateBitmapIndirect(pBitmap);
放到 剪贴板看看 对不对 !(绘图 +paste)
------解决方案--------------------
HBITMAP hbmp = NULL;
hbmp = CreateBitmapIndirect(pBitmap);
if( hbmp )
{
// move to Clipboard for test
OpenClipboard();
EmptyClipboard();
SetClipboardData(CF_BITMAP,hbmp); // not CF_DIB
CloseClipboard();
}