作者sealoe (YoY)
看板Programming
标题Re: [问题] opencv全萤幕?
时间Tue Dec 22 11:23:39 2009
※ 引述《sealoe (YoY)》之铭言:
自问自答XD orz
在Windows和GTK上面原理都是完全相同, 所以我用Win32的来说明.
小弟环境使用DEV-C/OPENCV 同样的VC也一样可以用这种方法
cvGetWindowHandle 是Opencv取得HWND的函式, 可是这个函式有点怪.
OpenCV在绘制图型时一般使用
cvNamedWindow 创建视窗, cvShowImage把IplImage塞入视窗作显示
一般人如我可能会想说使用 cvGetWindowHandle 配合
style = GetWindowLong(hWnd,GWL_STYLE);
SetWindowLong(hWnd,GWL_STYLE,(style&(~WS_CAPTION)));
SendMessage(hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
这种方式, 就可以透过sendmessage把视窗最大化,
但是这是不可行的, 因为OpenCV在绘图时事实上是产生两个视窗
一个主视窗, 一个内嵌於主视窗的子视窗, 换言之cvGetWindowHandle
取得的是子视窗之HWND, 所以你使用SendMessage的方式只能控制其内的子视窗
对於主视窗是完全没有影响的.
此时怎麽办呢? 这时候就必须使用FindWindow使用方法如下
//全萤幕 ===================
DWORD style=0;
hWnd= FindWindow(NULL, "ApolloCCTV太阳神扩视软体"); //注意
//hWnd=cvGetWindowHandle("ApolloCCTV太阳神扩视软体"); //是被内签之视窗, 非主视窗
style = GetWindowLong(hWnd,GWL_STYLE);
SetWindowLong(hWnd,GWL_STYLE,(style&(~WS_CAPTION)));
SendMessage(hWnd, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
//=================================================
此时透过FindWindow取得主视窗的HWND 再用SendMessage传送SC_MAXIMIZE就ok了
: 请问opencv如何把所绘制的图展现在全萤幕呢?
: 我找过网上的资料, 通常都是读取萤幕大小
: 然後放大到跟萤幕一样, 可是, 这样上面还是有"一条" bar.
: 虽然可以用座标隐藏以来, 但是拉一拉还是跑出来.
: 我想做的是如全萤幕放电影般的效果.
: 平台是window, 和linux(GTK, 网上有资料, 但是似乎不能用)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.128.252.130
1F:推 tocute:good 感恩 教学 61.31.133.159 12/22 20:00
2F:推 wa120:推 140.133.9.148 12/22 20:05