社区
多媒体/流媒体开发
帖子详情
direct视频截图问题
kgzhw
2011-04-19 02:21:52
请问怎么将ddraw的离屏表面保存为一幅图片,bmp或jpg都行。
请高手指教!
...全文
170
10
打赏
收藏
direct视频截图问题
请问怎么将ddraw的离屏表面保存为一幅图片,bmp或jpg都行。 请高手指教!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kgzhw
2011-05-01
打赏
举报
回复
谢谢楼上几位,问题已经解决了,就是通过p_hantom所说的将surface上的数据进行存储就行了,不过我这儿yuv数据,需要先转为RGB格式的数据在存为bmp格式文件就行了。
CyberLogix
2011-04-20
打赏
举报
回复
不用走GDI的DC了,得到数据后直接写道文家了了事
kgzhw
2011-04-20
打赏
举报
回复
[Quote=引用 6 楼 p_hantom 的回复:]
DDraw和D3D的工作方式和GDI不一样的,用DC根本得不到显存中的数据
既然你能获取DDraw的Surface还干啥绕个圈走GDI的DC呢
[/Quote]
请教高招!
IONPhantom
2011-04-20
打赏
举报
回复
DDraw和D3D的工作方式和GDI不一样的,用DC根本得不到显存中的数据
既然你能获取DDraw的Surface还干啥绕个圈走GDI的DC呢
IONPhantom
2011-04-20
打赏
举报
回复
[Quote=引用 7 楼 kgzhw 的回复:]
引用 6 楼 p_hantom 的回复:
DDraw和D3D的工作方式和GDI不一样的,用DC根本得不到显存中的数据
既然你能获取DDraw的Surface还干啥绕个圈走GDI的DC呢
请教高招!
[/Quote]
我不是说了么,获取DDraw的Surface对象然后就可以直接存盘
如果程序不是你自己写的是别人的进程那就只能hook DDraw的API然后拦截调用了
kgzhw
2011-04-19
打赏
举报
回复
[Quote=引用 3 楼 oexpress 的回复:]
bi.bmiHeader.biWidth 和bi.bmiHeader.biHeight两个不因该为0
你应该得到离屏表面的宽和高信息,然活把这两个字段填写进去,呵呵
[/Quote]
我用的屏幕宽高以后,存下来的图片全是黑色的。
kgzhw
2011-04-19
打赏
举报
回复
执行GetDIBits(hDC, hBmp, 0, h, buf, &bi, DIB_RGB_COLORS);后buf中没有数据!!
CyberLogix
2011-04-19
打赏
举报
回复
bi.bmiHeader.biWidth 和bi.bmiHeader.biHeight两个不因该为0
你应该得到离屏表面的宽和高信息,然活把这两个字段填写进去,呵呵
kgzhw
2011-04-19
打赏
举报
回复
[Quote=引用 1 楼 oexpress 的回复:]
ddraw的离屏表面的类容就是RGG数据,你下个文件加上BMP的HEADER, 然后把数据些进去就保存为BITMAP了
[/Quote]
我在网上查到这样一段代码,我觉得思想和你的一样,但是执行后bi.bmiHeader.biWidth 和bi.bmiHeader.biHeight两个值始终为零;所有存下来的图片什么都没有。请问问题会出在那儿?
int w = GetSystemMetrics(SM_CXSCREEN);
int h = GetSystemMetrics(SM_CYSCREEN);
HDC hDC;
m_pDDSBACK->GetDC(&hDC);//m_pDDSBACK为离屏表面
HDC hMemDC = CreateCompatibleDC(hDC);
HBITMAP hBmp = CreateCompatibleBitmap(hDC, w, h);
HBITMAP hOld = (HBITMAP)SelectObject(hMemDC, hBmp);
BitBlt(hMemDC, 0, 0, w, h, hDC, 0, 0, SRCCOPY);
int span = 3*w+((4-(3*w)&3)&3); //trim up to DWORD
BYTE *buf = new BYTE[span*h];
memset(buf, 0, span*h);
BITMAPINFO bi;
memset(&bi, 0, sizeof(BITMAPINFO));
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
GetDIBits(hDC, hBmp, 0, h, NULL, &bi, DIB_RGB_COLORS);
bi.bmiHeader.biBitCount = 24;
bi.bmiHeader.biCompression = 0;
bi.bmiHeader.biSizeImage = span*h;
GetDIBits(hDC, hBmp, 0, h, buf, &bi, DIB_RGB_COLORS);
BITMAPFILEHEADER bfh;
memset(&bfh, 0, sizeof(BITMAPFILEHEADER));
bfh.bfType = 'B '| 'M ' <<8;
bfh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
+ span*h;
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
HANDLE hFile = CreateFile( "snag1.bmp ", GENERIC_WRITE, 0, 0,
CREATE_ALWAYS, 0, 0);
DWORD dw;
WriteFile(hFile, &bfh, sizeof(BITMAPFILEHEADER), &dw, NULL);
WriteFile(hFile, &bi.bmiHeader, sizeof(BITMAPINFOHEADER), &dw, NULL);
WriteFile(hFile, buf, span*h, &dw, NULL);
CloseHandle(hFile);
SelectObject(hDC, hOld);
DeleteObject(hBmp);
DeleteDC(hMemDC);
m_pDDSBACK-> ReleaseDC(hDC);
delete buf;
CyberLogix
2011-04-19
打赏
举报
回复
ddraw的离屏表面的类容就是RGG数据,你下个文件加上BMP的HEADER, 然后把数据些进去就保存为BITMAP了
java
截图
开发,java – 如何开发屏幕
截图
到
视频
应用程序
>要获取屏幕
截图
,请使用Robot.createScreenCapture(
Rect
angle).>要获取许多屏幕
截图
,请在(Swing)计时器调用的循环中调用它.将它们添加到可扩展的集合(如ArrayList)中.>使用ImageIO.write()将Buffere
dI
mage对象转换为JPEG格式.>要将这些屏幕
截图
组成一个.MOV,请使用JMF的JpegImagesT...
TCPMP中使用G
DI
、
Di
rect
及
Di
rect
Draw效果对比
早先跟ZL讨论过WinCE6.0下使用TCPMP播放
视频
的
问题
。他认为直接写显存应该可以让
视频
播放更流畅。今天我在我们的平台上实际测试了一下,分别使用G
DI
、
Di
rect
和
Di
rect
Draw三种方式做了Benchmark,其中
Di
rect
就是他所说的直接写显存的方式。 为了让TCPMP支持
Di
rect
的方式,需要修改overlay_
di
rect
.c中的相关代码,使其能...
di
rect
show 无窗模式,可按钮触发
截图
事件
//无窗模式,可按钮触发
截图
#include #include #include #include #include #include #include #include #pragma include_alias( "dxtrans.h", "qe
di
t.h" ) #define __IDxtCompositor_INTERFACE_DEFI
di
rect
show
学习图像处理至今,总算回显示bmp和avi了,可是更
问题
的来了,怎么把avi中的
视频
帧提取直线然后再显示呢
di
rect
show里的filter啊
多媒体编程——屏幕
截图
多媒体编程——屏幕
截图
为什么要先讲屏幕
截图
而不是硬件加速渲染图像呢,因为
视频
播放需要连续渲染图像,而最好的图像来源就是
视频
文件。但是
视频
文件解析是一个巨大的课题,哪怕是做一个测试例子,也至少要引入某些开源的解析库,非常麻烦。所以先讲屏幕
截图
,不停的抓图,得到一张张屏幕画面,进而后面章节可以讲解怎么渲染图像实现
视频
播放。 屏幕
截图
,依然会用到
Di
rect
,具体的说是
Di
rect
Dr
多媒体/流媒体开发
2,554
社区成员
20,277
社区内容
发帖
与我相关
我的任务
多媒体/流媒体开发
专题开发/技术/项目 多媒体/流媒体开发
复制链接
扫一扫
分享
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章