2009年7月24日 星期五

[轉貼] Qt4.4.3 在s3c2440平台的移植

Qt4.4.3 在s3c2440平台的移植      版本1.0
首先,從http://trolltech.com/downloads下載針對嵌入式設備的Device Creation版,目前最新穩定版是
qt-embedded-linux-opensource-src-4.4.3。下面是詳細的移植步驟:

1.解壓縮
  tar zxf qt-embedded-linux-opensource-src-4.4.3.tar.gz
   cd qt-embedded-linux-opensource-src-4.4.3

2.編譯,使用系統默認的圖片庫,保留大部分常用功能,並加入tslib觸摸屏校驗的支持
./configure \
  -prefix /new_disk/weiyan/qt/build/ \  //指定安裝的目錄,與開發板上運行的目錄一致
  -release -shared \
  -fast \
  -pch \
  -no-qt3support \
  -qt-sql-sqlite \
  -no-libtiff -no-libmng \
  -qt-libjpeg \
  -qt-zlib \
  -qt-libpng \
  -qt-freetype \
  -no-openssl \
  -nomake examples -nomake demos -nomake tools\
  -optimized-qmake \
  -no-phonon \
  -no-nis \
  -no-opengl \
  -no-cups \
  -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xkb -no-sm\
  -no-xinerama -no-xshape \
  -no-separate-debug-info \
  -xplatform qws/linux-arm-g++ \
  -embedded arm \
  -depths 16 \
  -no-qvfb \
  -qt-gfx-linuxfb \
  -no-gfx-qvfb  -no-kbd-qvfb  -no-mouse-qvfb\
  -qt-kbd-usb \
  -confirm-license \
  -qt-mouse-tslib

make (或者gmake)
make install (或者gmake install)

3.設置Qt4應用程序的編譯環境
  cp bin/qmake /usr/bin

4.製作Qt4的文件系統,進行適當的裁減
  只複製必須的Qt庫
  cd $rootfs  #$rootfs 為文件系統的目錄
  mkdir new_disk/weiyan/qt/build –p && cd new_disk/weiyan/qt/build
  cp /new_disk/weiyan/qt/build/lib/libQtCore.so ./
  cp /new_disk/weiyan/qt/build/lib/libQtGui.so.4 ./
  cp /new_disk/weiyan/qt/build/lib/libQtNetwork.so.4 ./
  mkdir fonts
  只複製支持中文顯示的文泉驛字體
  cp /mnt/qt/build/lib/fonts/wenquanyi_120_50.qpf fonts

5.編譯內置的測試程序
cd $QTDIR/examples/qws/mousecalibration
qmake && make
cp mousecalibration $rootfs/new_disk/weiyan/qt/build/

6.在wy2440開發板上運行QT4測試程序
   重新生成yaffs2文件系統
   mkyaffs $rootfs rootfs.yaffs2

   已生成的文件系統大小為24M
   ll rootfs.yaffs -h
   -rw------- 1 root root  24M 2008-11-02 03:09 rootfs.qt4

在wy2440開發板上重新燒寫文件系統,進入到U-Boot
WEIYAN # run uprootfs  自動升級文件系統
WEIYAN # boot   啟動內核

設置QT4運行的環境變量
export QTDIR=/new_disk/weiyan/qt/build
export LD_LIBRARY_PATH=$QTDIR/lib:$OPIEDIR/lib
export PATH=$QTDIR/bin:$OPIEDIR/bin:$PATH
export QWS_MOUSE_PROTO=tslib:/dev/event1
export TSLIB_ROOT=/usr
export TSLIB_TSDEVICE=/dev/event1
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_CONFFILE=/etc/ts.conf

執行基於Qt4的觸摸屏校驗
[root@WEIYAN /]$ ./new_disk/weiyan/qt/build/mousecalibration

2009年6月9日 星期二

MFC 學習筆記,Invalidate()、RedrawWindow()、UpdateWindow()的差異

Invalidate()是強制系統進行重繪,但是不一定就馬上進行重繪。因為Invalidate()只是通知系統,此 時的視窗已經變為無效。強制系統調用WM_PAINT,而這個消息只是Post(寄送)就是將該消息放入訊息佇列。當執行到WM_PAINT消息時才會對視窗進行重繪。

  UpdateWindow只向表單發送WM_PAINT消息,在發送之前判斷GetUpdateRect(hWnd,NULL,TRUE)看有無可繪製的 用戶端區域,如果沒有,則不發送WM_PAINT。發送即不經過訊息佇列,直接發送到對應視窗,因此此函數可以立即更新視窗。

  RedrawWindow()則是具有Invalidate()和UpdateWindow()的雙特性。聲明視窗的狀態為無效,並立即更新視窗,立即調用WM_PAINT消息處理。

MFC 學習筆記,改變Static Text的顏色、背景色

在類別,右鍵,選擇屬性

image

在屬性視窗 的訊息 WM_CTLCOLOR 加入消息函數

OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

WMCTLCOLOR

在函數中加入對應程式碼:

if (pWnd->GetDlgCtrlID()==IDC_STATIC_S_TEXT)
{
pDC->SetTextColor(m_textColor); //設置字體顏色
pDC->SetBkMode(TRANSPARENT); //設置字體背景為透明
// TODO: Return a different brush if the default is not desired
return (HBRUSH)::GetStockObject(WHITE_BRUSH); // 設置背景色
}
else
return hbr;
其中,m_textColor是全域變數,要動態更改的方法為,在Button Click時加入:
SetDlgItemText(IDC_STATIC_S_TEXT,"OPENED");
m_textColor = RGB(255, 0, 0) ;
GetDlgItem(IDC_STATIC_S_TEXT)->RedrawWindow();
//GetDlgItem(IDC_STATIC_S_TEXT)->InvalidateRect(NULL);
設定全域變數m_textColor新的顏色, 然後呼叫RedrawWindow()或是InvalidateRect(NULL)重繪。

2009年6月3日 星期三

OpenCV 擷取Webcam

轉灰階

IplImage * GRAY = 0;
GRAY = cvCreateImage(cvSize(frame1->width,frame1->height),IPL_DEPTH_8U,1);
cvCvtColor(frame1, GRAY, CV_RGB2GRAY);
cvCvtColor(GRAY, frame1, CV_GRAY2RGB);
cvReleaseImage(&GRAY);

啟動WebCam,並指定handle給 Panel

int ncams = cvcamGetCamerasCount();
int width=640;
int height=480;
Panel1->Width = width;
Panel1->Height = height;

HWND hwnd = Panel1->Handle;

cvcamSetProperty(0, CVCAM_PROP_ENABLE, CVCAMTRUE);
cvcamSetProperty(0, CVCAM_PROP_CALLBACK,CaptureCallback);
cvcamSetProperty(0, CVCAM_PROP_WINDOW, &hwnd);
cvcamSetProperty(0,CVCAM_RNDWIDTH,&width);
cvcamSetProperty(0,CVCAM_RNDHEIGHT,&height);


cvcamGetProperty(0,CVCAM_CAMERAPROPS,NULL); // 開啟webcam設定介面

cvcamInit();
cvcamStart();

關閉WebCam

cvcamStop();

cvcamExit();