hur.cn - 华软网

 热门搜索

请问在vc下用directdraw直接读取显存啊

  作者:未知    来源:网络    更新时间:2010/6/26
我想用个32位指针直接指向显存,然后读取每个像素的值,不知道应该怎么编程呢?谢谢大虾了!
---华软 网友回答---
指向显存???
太神奇了~!
你应该用获取那个图形的句柄,然后再获取每个像素的值。
---华软网友回复---
那样会很慢的,我想直接对显存操作!
---华软网友回复---
通常不直接写显存,尤其不要读显存,很慢的,一般的做法是在系统内存中创建一个缓冲表面,然后直接操作这个缓冲表面的内存,操作完成后一次性blt到显存中。
---华软网友回复---
jameshooo:你有相关代码吗?我在网上找了很多创建缓冲表面的代码,但是读不出来显存的内容,我不想对显存写,我只想读,大侠能详述一下吗?
---华软网友回复---
不要尝试读显存,通常只写显存,因为显存中的内容是不会人为改变的,在写入之前你就已经知道了。

在系统内存中创建缓冲表面只需要合适的创建参数即可,这是我用的一段代码,你可能不能直接用,但是能理解其意义:
C++">
CDDSURFACEDESC dds(DDSCAPS_OFFSCREENPLAIN /*| DDSCAPS_SYSTEMMEMORY*/, DDSD_PIXELFORMAT, cx, cy);
dds.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
dds.ddpfPixelFormat.dwFlags = DDPF_RGB | DDPF_ALPHAPIXELS;
dds.ddpfPixelFormat.dwFourCC = 0;
dds.ddpfPixelFormat.dwRGBBitCount = 32;
dds.ddpfPixelFormat.dwRBitMask = 0x00ff0000;
dds.ddpfPixelFormat.dwGBitMask = 0x0000ff00;
dds.ddpfPixelFormat.dwBBitMask = 0x000000ff;
dds.ddpfPixelFormat.dwRGBAlphaBitMask = 0xff000000;
HRESULT hr = dd->CreateSurface(&dds, &_ddSurface.p, NULL);


---华软网友回复---
很是谢谢你了,我刚才编了一段代码已经可以成功的写显存了,
我公司现在要做一个远程桌面控制,所以我只需要读当前桌面的像素值就可以了,然后通过socket发送出去,
我以前尝试过用getpixel函数,但是那个太慢了,后来在网上听说directdraw这种会比较快,所以打算用这个,你看我这个方法行吗?
---华软网友回复---
引用 6 楼 huxiangyang4 的回复:
很是谢谢你了,我刚才编了一段代码已经可以成功的写显存了,
我公司现在要做一个远程桌面控制,所以我只需要读当前桌面的像素值就可以了,然后通过socket发送出去,
我以前尝试过用getpixel函数,但是那个太慢了,后来在网上听说directdraw这种会比较快,所以打算用这个,你看我这个方法行吗?

大哥,你怎么写的显存?      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。