Just a Computer Graphics Studio & My Life

一直想知道遊戲放全螢幕是怎麼做到,現在我總算找到方法來實現!原來知道方法以後,就覺得全螢幕顯示 (Full Screen Display)沒什麼難度,因為其實就只是很簡單的想法,就可以克服先天上(系統)的限制,難是難在我們總是複雜化問題而不自知:P

happyman_full_screen

上圖是我修改程式讓原本700×491的影像,不成比例放大為1680×1050的全螢幕,而原圖如下,兩圖皆可點開放大~

happyman

/**
	Theme: Full Screen Display
	compiler: Visual C++ 2010 with OpenCV 2.4.3
	Date: 102/05/08
	Author: HappyMan
	Blog: https://cg2010studio.wordpress.com/
*/
#include <opencv/highgui.h>
#include <opencv/cv.h>

#define SCREEN_W 1680
#define SCREEN_H 1050
#define BORDER 10

int main()
{
	IplImage * img;
	img = cvLoadImage("happyman.jpg", CV_LOAD_IMAGE_COLOR);

	//Key 1: cvNamedWindow比需加設參數CV_WINDOW_NORMAL,才能設定我們需要的大小
	cvNamedWindow("Happy Window", CV_WINDOW_NORMAL);
	//Key 2: 設定Window屬性為全螢幕,所以就不會有最上面的Title Bar
	cvSetWindowProperty("Happy Window", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
	//Key 3: 視窗再變大一些
	cvResizeWindow("Happy Window", SCREEN_W + BORDER, SCREEN_H + BORDER);
	//Key 4: 視窗往左上角移一些
	cvMoveWindow("Happy Window", -BORDER, -BORDER);

	cvShowImage("Happy Window", img);
	cvWaitKey(0);
	return 0;
}

透過葉正聖老師的教學,讓我知道有四個關鍵視窗特性設定好之後,還要加上放大位移。此時,我很好奇放大和位移的量最少數值為何,就能讓視窗佔滿整個螢幕畫面?我想答案就讓我實驗出來吧~

修改這幾行code:

#define SCREEN_W 1680/3
#define SCREEN_H 1050/3
	cvMoveWindow("Happy Window", 1000, 600);

意思是將視窗設定為螢幕大小的1/3,將影像塞到這樣子大的視窗,接著把視窗移動到螢幕位置(1000, 600),下圖是編譯執行後的結果,點圖可放大~

happyman_full_screen2

剛好今天是陳妍希創作歌曲—方向的MV發表在Youtube的時候,呵呵~

把圖放大之後你將可發現,視窗真的沒有Title BarBorder,不過最左邊最上邊卻有1 pixel的灰色線條,所以BORDER設定為1即可~當然若是播放Video而非Image的話,BORDER設越小越好囉~因為看不到就不要去處理,讓效能維持最佳狀態!

真是謝謝陳妍希的方向,因為真的是選擇重於努力,才讓我覺得這一切的努力都值得:)指引我方向的女神>///<

參考:葉正聖老師:教研究生學OpenCVHow to display an image in full screen borderless window in openCV

廣告

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: