抓取 Direct3D 图像到 GDI 位图

简介: 比较简单, 下面直接贴代码了:   // IDirect3DDevice8* pDevice; // RECT rcScreen; // = {0, 0, 1024, 768}; // HDC hdc; // HBITMAP hbitmap; // 忽略返回值检查,应该按需要...

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

 

// 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();

 

目录
相关文章
|
2月前
|
C++
SDL基础使用02(加载bmp图片、纹理和渲染)
这篇文章介绍了如何使用SDL库在C++中加载和显示BMP图片,以及如何使用纹理和渲染器进行更高级的图形处理。
25 2
|
6月前
|
存储 编解码 API
如何通过编程获取桌面分辨率、操作像素点颜色、保存位图和JPG格式图片,以及图片数据的处理和存储方式
如何通过编程获取桌面分辨率、操作像素点颜色、保存位图和JPG格式图片,以及图片数据的处理和存储方式
104 0
|
7月前
|
XML 算法 Java
Android App开发之位图加工Bitmap中转换位图的像素色彩、裁剪内部区域、利用矩阵变换位图的讲解及实战(附源码和演示)
Android App开发之位图加工Bitmap中转换位图的像素色彩、裁剪内部区域、利用矩阵变换位图的讲解及实战(附源码和演示)
117 0
|
文字识别 监控 算法
Baumer工业相机堡盟相机使用BGAPISDK联合Halcon直接进行图像显示(Mono)(C#)(将图像数据Buffer转为HObject)
Baumer工业相机堡盟相机使用BGAPISDK联合Halcon直接进行图像显示(Mono)(C#)(将图像数据Buffer转为HObject)
132 0
|
存储
QT+OpenGL 面剔除和帧缓冲
OpenGL能够检查所有面向(Front Facing)观察者的面,并且渲染他们,而丢弃那些背向的面,节省我们很多的片段着色器的调用。 我们需要告诉OpenGL哪些是正面,哪些是背面。逆时针是正面,顺时针是反面。
122 0
|
C++
CxImage内存方式转换图像
最近,处于项目需要,需要将Bmp转换为JPEG格式。以前做过,采用的是GDI+的方式,该方式有一个极大地缺陷为无法实现跨平台处理。闲话少说,进入正题。 [cpp] view plain copy   CxImage cxImageBmp(pRGBBuffer, dwRGBSize, CXIMAGE_FORMAT_BMP);      cxImageBmp.Save("D:\\ttt.jpg",CXIMAGE_FORMAT_JPG);   该方式很正常,顺利将RGB格式24位BMP图像转化为本地JPG文件并保存下来。
1210 0
像素缓冲区对象(PBO) 的Streaming-Texture上传 源码解析
像素缓冲区对象(PBO) 的Streaming-Texture上传 源码解析
232 0
像素缓冲区对象(PBO) 的Streaming-Texture上传 源码解析
Halcon把8位图转换为24位图的方法
Halcon把8位图转换为24位图的方法
482 0