标题:[求助]用DirectX的什么函数可以把内存中的图片显示到屏幕?
只看楼主
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
结帖率:100%
 问题点数:0 回复次数:2 
[求助]用DirectX的什么函数可以把内存中的图片显示到屏幕?
DirectX的什么函数可以把内存中的图片显示到屏幕?
搜索更多相关主题的帖子: DirectX 内存 函数 屏幕 
2007-03-24 16:55
tiancaiak
Rank: 2
等 级:论坛游民
威 望:1
帖 子:111
专家分:43
注 册:2006-9-17
得分:0 
Blt()和BltFast()
不过在这之前要把图片加到表面上:
BOOL LoadBMPSurface(LPDIRECTDRAWSURFACE7 &lpDDS,LPCSTR pszBitmapFile)
{
HBITMAP hbm;
BITMAP bm;
HDC hdc1,hdc2;
HRESULT hr;
if(lpDDS==NULL)
{
MessageBox(m_hWnd,"未创建的DirectDrawNULL离屏表面","出错啦",0);
return FALSE;
}
hbm=(HBITMAP)LoadImage(NULL,pszBitmapFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(hbm==NULL)
{
MessageBox(m_hWnd,"无法加载Bitmap文件","出错啦啦",0);
DeleteObject(hbm);
return FALSE;
}
hdc1=CreateCompatibleDC(NULL);
if(hdc1==NULL)
{
MessageBox(m_hWnd,"无法创建兼容DC","出错啦",0);
DeleteObject(hbm);
return FALSE;
}
SelectObject(hdc1,hbm);
GetObject(hbm,sizeof(bm),&bm);
DDSURFACEDESC2 ddsd;
memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
hr=lpDDS->GetSurfaceDesc(&ddsd);
if(hr!=DD_OK)
{
MessageBox(m_hWnd,"无法得到表面信息","出错啦",0);
DeleteDC(hdc1);
if(hbm)
DeleteObject(hbm);
return FALSE;
}
hr=lpDDS->GetDC(&hdc2);
if(hr!=DD_OK)
{
MessageBox(m_hWnd,"无法创建表面相关DC","出错啦",0);
DeleteDC(hdc1);
if(hbm)
DeleteObject(hbm);
return FALSE;
}
StretchBlt(hdc2,0,0,ddsd.dwWidth,ddsd.dwHeight,hdc1,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
lpDDS->ReleaseDC(hdc2);
if(hbm)
DeleteObject(hbm);
DeleteDC(hdc1);
return TRUE;
}

之后用Blt()或BltFast()把加有图片的那个表画贴到主表画上

2007-03-24 18:09
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
得分:0 
我是想利用API钩子,勾住这个函数,以达到游戏截图的目的

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2007-03-25 08:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-126441-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.505647 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved