DSPack控制摄像头,如何调用PIN_CATEGORY_STILL截图

ysai 2010-04-27 04:26:29
>>有些照相机,摄像头除了可以捕获视频流以外还可以捕获单张的,静止的图片。通常,静止的图片的质量要比流的质量要高。摄像头一般都一个按钮来触发,或者是支持软件触发。支持输出静态图片的摄像头一般都要提供一个静态图片pin , 这个pin 的种类是PIN_CATEGORY_STILL。

网上有C++的代码,但是翻译过来后
RenderStream(@PIN_CATEGORY_STILL.....
就返回不了S_OK,有高人用DELPHI调用过这个PIN吗?

PS:请不要发C++的
...全文
864 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
试验工程师 2011-04-22
  • 打赏
  • 举报
回复
最近我也遇到同样的问题,楼主能不能给点详细点的代码?谢谢先!
ysai 2010-04-29
  • 打赏
  • 举报
回复 1
网上转得最多的那份说明,也就是MSDN上的代码是正确的,不过不是文中的顺序

步骤是:
1.声明一个类TSampleGrabberCallback,实现ISampleGrabberCB接口
2.一个FilterGraph,一个Filter连接源,两个SampleGrabber,一个VideoWindow
3.用代码建立一个COM的NullRender并连上FilterGraph
4.重要:SampleGrabberB.SetCallback(ISampleGrabberCB, 1)
5.先RenderStream PIN_CATEGORY_CAPTURE,Filter,SampleGrabberA,VideoWindow(预览)
再RenderStream PIN_CATEGORY_STILL,Filter,SampleGrabberB,NullRender(静态)
6.AMVidControl.SetMode(STILL_PIN,VideoControlFlag_Trigger)
第6步后,在TSampleGrabberCallback的回调过程里就能取得BUFFER数据了,注意是异步的
ysai 2010-04-29
  • 打赏
  • 举报
回复
多谢7楼提醒,我先RenderStream一个PIN_CATEGORY_CAPTURE,再RenderStream PIN_CATEGORY_STILL调用成功了,但是ISampleGrabberCB这个接口的回调函数并没有被调用,即无法获取PIN_CATEGORY_STILL的数据

我想应该是有个方法触发拍照动作,然后回传数据时才会调用ISampleGrabberCB,但不知道是哪个接口的
yktd26 2010-04-29
  • 打赏
  • 举报
回复
可能用这个pin截取图片时不能用SampleGrabber
在网上帮你找到可能是应该用IBasicVideo::GetCurrentImage(),查查msdn上IBasicVideo这个接口是不是有这个函数?
  • 打赏
  • 举报
回复
不知道,友情帮你顶,期待能解之人
siwuge 2010-04-28
  • 打赏
  • 举报
回复
我也想知道,关注中。
yktd26 2010-04-28
  • 打赏
  • 举报
回复 1
PIN_CATEGORY_STILL Pin that provides a still image. The filter's capture pin must be connected before the still-image pin is connected.
这是在msdn上找到的,不知道楼主有没有在之前链接capture的pin
还有就是
Some cameras can produce a still image separate from the capture stream, and often the still image is of higher quality than the images produced by the capture stream. The camera may have a button that acts as a hardware trigger, or it may support software triggering. A camera that supports still images will expose a still image pin, which is pin category PIN_CATEGORY_STILL.
不是每一个摄像头都支持这个pin的
楼主真的对截取的图像质量要求很高么?
如果不是,3楼simplegrabber的办法其实不错
ysai 2010-04-27
  • 打赏
  • 举报
回复
TO 2楼:
不是那个PIN,而是这个PIN_CATEGORY_STILL
用它RenderStream就失败了,而且C++代码里用它不是用你这方法截图的
u9085 2010-04-27
  • 打赏
  • 举报
回复
SampleGrabber1.GetBitmap(Image1.Picture.Bitmap);
u9085 2010-04-27
  • 打赏
  • 举报
回复
RenderStream(@PIN_CATEGORY_PREVIEW, nil, Filter as IBaseFilter, SampleGrabber as IBaseFilter, VideoWindow as IbaseFilter);
mdejtod 2010-04-27
  • 打赏
  • 举报
回复
好像加个 IsampleGrabber FILTER就可以吧,具体的不太记得了

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧