Sean's Note

2012年11月27日 星期二

安裝 Aptana Studio 3

Aptana Studio 3 是一套支援網頁開發的外掛程式,支援大部分的網頁語言編輯撰寫功能,

如 HTML、PHP、JavaScript、Rails、Python 等。而除了程式碼提示、自動完成與偵錯的功能,

也提供了一些程式碼的佈景主題,讓程式碼更容易閱讀。

在 Eclipse 安裝 Aptana Studio 3 的套件時,如果曾經裝過 PyDev 套件,

會出現和 Aptana 和 PyDev 相衝的錯誤訊息,因為 Aptana Studio 3 裡已包含 PyDev 套件,

所以可先移除 PyDev 套件再重新安裝一次即可。


在 2014.8.22 補充:

最近更新 Aptana 3.6 後,PyDev 在 theme 和 auto completion 上都變得怪怪的

後來乾脆只裝 PyDev 3.6,自己改 PyDev Editor 的 Color 設定。

XML 則裝 Rinzo XML Editor 1.4: http://editorxml.sourceforge.net/updates/。

2012年11月14日 星期三

JPG, EXIF 與 Orientation

JPEG, TIFF 或 RIFF 中會有個 EXIF (Exchangeable image file format) 標頭檔,

裡面存放了許多資訊,例如: 製造廠商 (Manufacturer)、相機型號 (Model)、

影像方向 (Orientation)、光圈值 (FNumber) 與 ISO 等等。其中,Orientation 是為了數位相機

和手機等所使用,記錄使用者拍照時相機的方向,以八個值定義:

1 - 右上 (我們平常拿相機的方向,若以右上角的拍照鍵定為基準點),此時人頭朝上
2 - 1 的左右鏡像
3 - 左下 (基準點此時在右下),此時人頭朝下
4 - 3 的左右鏡像
5 - 6 的左右鏡像
6 - 右下,此時人頭朝左
7 - 7 的左右鏡像
8 - 左上,此時人頭朝右

以 1, 3, 6, 8 為常見值,2, 4, 5, 7 除非顯示裝置或軟體支援,否則無效。

Windows Photo Viewer 並不支援 EXIF 的 Orientation Flag,也就是說原始資料 (Raw Data)

是什麼就顯示什麼,並不會幫使用者轉方向。另外,使用 Windows Photo Viewer 轉向後

儲存也會造成失真,建議還是以其他軟體來編輯相片吧!


參考資料:
  1. http://en.wikipedia.org/wiki/Exchangeable_image_file_format
  2. http://www.impulseadventure.com/photo/exif-orientation.html

2012年10月31日 星期三

利用 WM_GESTURE 寫出有 Touch 功能的程式

如果只想做出簡單的 PAN 功能,可透過接收 WM_TABLET_FLICK 訊息來達成,

其提供了八個方向,但在 Win8 上好像收不到這個訊息。

另外的替代方案是,在 Win7 以上的作業系統,我們可以透過接受 WM_GESTURE 來實作。

在使用前先透過 WM_GESTURENOTIFY 和 SetGestureConfig() 設定我們要或不要接收

哪些手勢。假如設定好只接受 PAN 的手勢後,即可在 WM_GESTURE 用 GetGestureInfo()

攔到 GESTUREINFO.dwID = GID_PAN 的資訊。

另外由 GESTUREINFO.dwFlags = GF_BEGIN/GF_INERTIA/GF_END 來分析起始點、慣性點和

終點。要注意的是,除非有明確的 PAN 動作(手指離開時的點需停留得夠久),否則

GF_BEGIN/GF_END 並不會成對出現,而會出現 GF_INERTIA 的慣性點。

GF_INERTIA 是用來實作像是拖曳卷軸時手已經放開的滑動效果。

2012年10月24日 星期三

改變 TextOut 時的字型或大小

我們可以利用 CreateFont() 和 CreateFontIndirect() 來產生 HFONT 物件。

hFont = 

CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLIN 

E_PRECIS, CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, 

VARIABLE_PITCH,TEXT("Impact")); 

然後再將此字型物件置換到 DC 上即可。

SelectObject(hDC, hFont);

TextOut(hDC, 0, 0, "Hello", lstrlen("Hello"));

Ref: http://msdn.microsoft.com/en-us/library/windows/desktop/dd183499(v=vs.85).aspx

畫出只有邊框的透明 Rectangle

我們只要在選擇筆刷時設 NULL_BRUSH 即可 :

SelectObject(hDC,GetStockObject(NULL_BRUSH));

Rectangle(hDC, 0, 0, 100, 100);

[STL] 位移 List 的 Iterator

平常我們會使用 List 來記錄一些 data,例如:
list<int> mylist;

for (int i=0; i<10; i++) mylist.push_back (i*10);

並將 Iterator 指向開頭來走訪 data。

list<int>::iterator it = mylist.begin();

想要取得下一個元素時,可以使用 *it++ 前進一步。


那想要取得第 N 個元素呢?


呼叫 *it++ N 次嗎?


於是我們有了 advance 函式幫我們快速的移動到第 N 個元素:

advance (it, N-1);

2012年10月21日 星期日

[Windows] 開機時讓 Num Lock 鍵預設為開啟

Windows 開機時 Num Lock 鍵預設是關的,想要打開可以透過 Regedit.exe 來達成。

找到 HKEY_USERS\.DEFAULT\Control Panel\Keyboard\InitialKeyboardIndicators, 

把值改為 2 即開啟,0 為關閉。