2011年3月31日 星期四

Open File Dialog on Windows API

最近在寫檔案操作的功能, 就是選擇一個檔案然後做複製或刪除的動作.
以下是選擇檔案的部份程式碼:
wchar_t fileName[256];
OPENFILENAME opf;

ZeroMemory(&opf, sizeof(opf));
opf.hwndOwner = 0;
opf.lpstrFilter = L"All Files(*.*)\0\*.*\0\0";
 //opf.lpstrFilter = L"JPG Files\0*.jpg\0BMP Files\0*.bmp\0PNG Files\0*.png\0\0";
opf.nFilterIndex = 1;
opf.lpstrFile = fileName;
opf.lpstrFile[0] = L'\0';
opf.nMaxFile = sizeof(fileName);
opf.lpstrFileTitle = 0;
opf.nMaxFileTitle = 0;
opf.lpstrInitialDir = L"C:\\";
opf.lpstrTitle = L"select file";
opf.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
opf.lStructSize = sizeof(opf);

if(GetOpenFileName(&opf)
{
  do something...
}
而複製檔案就使用 CopyFile(srcFile, dstFile, true), 刪除則是 DeleteFile(file).

MSDN有範例, 該頁面還有其他功能, 如選擇顏色等, 連結如下:
http://msdn.microsoft.com/en-us/library/ms646829

2011年3月30日 星期三

OpenCV 2.2.0 on Qt (Win7)

最近開始學習 Qt 這個誇平台的東東, OpenCV 也是支援誇平台的.
當然順理成章把 OpenCV 放到 Qt 上玩玩, 以下說明:
在 .pro 檔內加入 include 及 lib 即可.

INCLUDEPATH += C:\OpenCV-2.2.0\include
LIBS += C:\OpenCV-2.2.0\VS2010\lib\Release\opencv_core220.lib
LIBS += C:\OpenCV-2.2.0\VS2010\lib\Release\opencv_highgui220.lib
LIBS += C:\OpenCV-2.2.0\VS2010\lib\Release\opencv_imgproc220.lib
LIBS += C:\OpenCV-2.2.0\VS2010\lib\Release\opencv_video220.lib

若是用 mingw
則可將 Qt 內附的 mingw 加入系統環境變數.
再使用 CMake 建置 mingw 的資料夾.
打開 cmd 畫面, 再移到 OpenCV-2.2.0\mingw 資料夾下
輸入指令: mingw32-make 即可產生 dll 及 lib檔.


INCLUDEPATH += C:\OpenCV-2.2.0\include
LIBS += C:\OpenCV-2.2.0\mingw\lib\libopencv_core220.dll.a
LIBS += C:\OpenCV-2.2.0\mingw\lib\libopencv_highgui220.dll.a
LIBS += C:\OpenCV-2.2.0\mingw\lib\libopencv_imgproc220.dll.a
LIBS += C:\OpenCV-2.2.0\mingw\lib\libopencv_video220.dll.a

最後記得將相關 dll 檔放入執行資料夾.

2011年3月28日 星期一

這是國外一個戶外的建築投影表演,近幾年看到國外許多戶外的建築投影表演。
這個表演有另外與民眾互動的方式,透過吹氣來呈現不同的效果。

2011年3月23日 星期三

實物投影 on 空間設計

實物投影(也有人稱建築投影或光雕投影)的一種應用.
之前國外也有在室外使用建築投影的方式做些動畫的呈現.
國內其實也是有展示過幾次, 以下影片是荷蘭一間公司將它應用在室內空間設計上.
感覺 IKEA 可以學學, 一方面可以省掉不少定期更換傢俱的成果, 另一方面亦可
在網頁上呈現, 造福一下中部的鄉親丫!

前置處理器 for C\C++

之前都有在使用前置處理器, 但僅限於 #ifdef, #else, #endif.
今天突然想用到 else if define 時卻發現並沒有這關鍵字, 就上網找了一下, 做個記錄.
else if --> #elif
#ifdef ABC = #if defined ABC
#ifndef ABC = #if !defined ABC
#undef ABC --> 消除 ABC 之定義

2011年3月21日 星期一

擴增實境的應用

最近朋友跟我分享一個 AR 的應用, 算是使用無框的方式來辨識, 個人認為這是一種很好的廣告方式且吸引許多人的注意. 影片如下:

2011年3月18日 星期五

Register OCX in Win 7

發現在 XP 轉到 Win7 還是有許多不適應, 尤其是多了個"系統管理員執行".
今天發生了個錯誤如下:
  呼叫 DllRegisterServer 失敗, 錯誤碼為 0x80040200
解決方式:
  系統管理員執行

2011年3月16日 星期三

OpenCV 2.2.0 in Windows & Mac

最近在用 OpenCV 發現一個很怪的現象, 就是目前最新版本 v2.2.0, 當我在使用 Mac 的 bootcamp之下的 Win 7 系統, 編譯後執行會無法顯示出 webcam 畫面, 但反觀在其他 Windows 的筆電確可以很正常的顯示...在尚未解決的情況下...只好如下使用:
Windows : OpenCV 2.2.0
Mac : OpenCV 2.1.0

顏色辨識(手指)

來了第一週就有確認了題目, 遊戲與復健的結合!
與一位陽明醫工博班的學生一起研究, 開始了手指辨識這件事.
一開始先找找國內外相關的研究或實作成果, 發現多數是手勢和臉居多.
但我們想要的是針對不同手指來做指令上的操作, 就只好從基本的 OpenCV 開始.
發現範例有個顏色辨識的範例, 修修改改後有些成果, 放個圖來記錄一下.

2011年3月14日 星期一

GetLastError in MSDN

以下網址即可找到錯誤訊息.
http://msdn.microsoft.com/en-us/library/ms681381

以下是 MSDN

void ErrorExit(LPTSTR lpszFunction)
{
    // Retrieve the system error message for the last-error code
    LPVOID lpMsgBuf;
    LPVOID lpDisplayBuf;
    DWORD dw = GetLastError();


    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER |
        FORMAT_MESSAGE_FROM_SYSTEM |
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,
        dw,
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &lpMsgBuf,
        0, NULL );

    // Display the error message and exit the process
    lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
        (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR));
    StringCchPrintf((LPTSTR)lpDisplayBuf,
        LocalSize(lpDisplayBuf) / sizeof(TCHAR),
        TEXT("%s failed with error %d: %s"),
        lpszFunction, dw, lpMsgBuf);
    MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK);

    LocalFree(lpMsgBuf);
    LocalFree(lpDisplayBuf);
    ExitProcess(dw);
}


void main()
{
    // Generate an error

    if(!GetProcessId(NULL))
        ErrorExit(TEXT("GetProcessId"));
}

2011年3月10日 星期四

Kinect 研討會

今天下午參加了一個 Kinect 介紹的研討會,是由國內中部某公司舉辦,基本上是在介紹公司產品,然後加上 Kinect 的一些成果,但是還很陽春。

PS:參加費 500 台票!

2011年3月8日 星期二

OpenCV 2.0 on VS2010 編譯錯誤解決方式

錯誤訊息
error C3861: 'back_inserter': identifier not found

解決方法
1.在 OpenCV2.0\src\cvaux\cvhog.cpp 開頭加入 #include <iterator>
2.在 OpenCV2.0\src\cv\cvmodelset.cpp 開頭加入 #include <iterator>

Havok on Android 2.3

Havok 一個知名的物理引擎,目前釋出支援 Android 2.3 版本。
從癮科技看到相關報導,並有在 Sony Ericsson Xperia Play 上的影片。

研究主題

老師給了個主題,是跟一位陽明醫工博班的學生合作。
提出將遊戲與醫療復健結合的平台,開始了看 paper 的工作,自己英文真是爛的可以,
幾乎都靠 google 翻譯來閱讀,好好惡補一下吧我!

第一次 meeting 結果,先從老人中風開始,使用手勢辨識來操作,一來使用者不需穿戴 sensor ,
二來建置成本低(扣掉電腦只需要一台 camera),看來要開始找找相關資料哩。

發現老師講話很直!

天氣

發現在台北也是可以一國兩制,我每天早上出門天氣陰,到南港捷運站就變雨天。
來了一星期還沒看過太陽露臉的,悶的咧~難怪士林夜市有個雨傘王!

吃飯

發現在南港附近吃的都不便宜,應該說台北吃都不便宜才對!
價位都在70起跳,看來要好好找找便宜點的來吃。

租屋

好心的表姐住士林夜市,有空房租我算半價!
每天都一堆人,假日更可怕,可以看豪大大雞排的排隊人數估算人潮。
每到傍晚6點:
-排隊一直線=非假日
-排隊L型=假日

3/1報到

過了個228連假,一大早坐電車到南港火車站,然後走路去坐公車。
帶著資料跟 Rita 跑來跑去辦報到手續,結果因為我還是學生身份無法用專任助理聘任,
瞬間薪水少了1萬...只能先用博士研究生聘任,還不能保勞健保!(PS:工讀生可)

第一天心得:等等等
-院內的郵局很多人,寄信、領錢、匯款都要排隊。
-院內的萊爾富很多人,結帳付錢要排隊。(PS:院內卡在手,一律89折)