`
in355hz
  • 浏览: 231541 次
社区版块
存档分类
最新评论

抓取 Direct3D 图像到 GDI 位图

 
阅读更多

比较简单, 下面直接贴代码了:

 

// IDirect3DDevice8* pDevice;
// RECT rcScreen; // = {0, 0, 1024, 768}; 
// HDC hdc;
// HBITMAP hbitmap;
// 忽略返回值检查,应该按需要加入错误处理

IDirect3DSurface8* pfb;
pDevice->CreateImageSurface(rcScreen.right, rcScreen.bottom, D3DFMT_A8R8G8B8, &pfb);
pDevice->GetFrontBuffer(pfb);

D3DLOCKED_RECT lr;
pfb->LockRect(&lr, NULL, D3DLOCK_READONLY);

BITMAPINFOHEADER bih;
memset(&bih, 0, sizeof(BITMAPINFOHEADER));
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biWidth = rcScreen.right;
bih.biHeight = rcScreen.bottom;
bih.biPlanes = 1;
bih.biBitCount = 32;
bih.biCompression = BI_RGB;

SetDIBits(hdc, hbitmap, 0, rcScreen.bottom, lr.pBits, &bih, DIB_RGB_COLORS);

pfb->UnlockRect();
pfb->Release();

 

分享到:
评论

相关推荐

    Windows-DXGI抓屏保存为位图-附源码.rar

    注意,由于DXGI涉及到Direct3D的使用,所以你需要对Direct3D的基本概念有一定的了解,例如资源、视图、上下文等。 总的来说,利用DXGI进行屏幕抓屏是一种高级且高效的方法,它充分利用了现代图形硬件的能力。通过...

    DirectX 抓屏应用实例 轻松搞定

    获取到的数据通常是原始的像素数据,可以保存为BMP格式的位图文件,这是一种常见的静态图像文件格式。 如果需要将一系列连续的屏幕抓取保存为AVI视频,这就涉及到帧率和编码的问题。AVI是一种容器格式,可以容纳...

    MFC读取网页上的一幅图片,并显示在界面上

    MFC没有内置的图像解码库,但可以借助第三方库如GDI+或更现代的Direct2D来完成解码工作。例如,使用GDI+的`Image`类,加载从网络获取的字节流,然后可以获取到`Graphics`对象,用它来绘制图像。 4. **创建CBitmap...

    vc 屏幕抓图

    2. 创建一个位图对象(Bitmap Object):我们需要一个内存中的位图来存储抓取的屏幕图像。这可以通过`CreateCompatibleBitmap()`函数完成,它会创建一个与指定DC兼容的位图。 3. 获取位图的设备上下文:创建位图后...

    c++ Dxgi+FFmpeg 完成对截图屏幕,以及将屏幕数据保存为MP4格式,以完成录屏功能

    通过创建一个DXGI共享资源,然后将其复制到内存缓冲区,就能得到屏幕的位图数据。这种方式不仅高效,而且能够捕获到硬件加速渲染的场景。 接下来,FFmpeg作为开源的多媒体处理框架,它包含了多种编解码器,可以用于...

    截图-易语言

    这些功能可以通过对位图对象的像素数据进行直接操作实现,也可以调用GDI+或Direct2D等图形库来完成更复杂的图像处理任务。 四、保存与展示截图 完成截图和编辑后,我们需要将图片保存到本地或直接显示给用户。...

Global site tag (gtag.js) - Google Analytics