星期二, 11月 29, 2011

[軟體] 簡單好用的影音轉檔軟體 Moo0 VideoConverter 1.10

http://www.moo0.com/?top=http://www.moo0.com/software/VideoConverter/ 

這個軟體好用在於可以將mkv重新編碼,並且可以設定編碼後的檔案大小,而且畫質也不差。這樣就可以把一些超過一片DVD大小的720P重新壓成一片DVD的大小。 然後就可以把影片燒錄起來。

 支援格式/ 編碼:

 - 影片格式: AVI, FLV, M4V, MKV, MOV, MP4, MPG, OGG, OGV, RM, SWF, TP, TS, WEBM, WMV and many more.
 - 影片編碼: H.263, H.264 (x264), Mpeg2, Mpeg4 (DivX, XviD and its own), RV10, Theora, VP8, WMV (v7, v8) and many more.
 - 聲音格式 / 編碼: 3G2, 3GP, AAC, AC3, ADPCM, AIFF, AMR (NB, WB), AU, FLAC, GSM, M4A, MP3, MP4, OGG, PCM, RA, VORBIS, WAVE, WMA and many more.

星期一, 11月 28, 2011

[軟體] Moo0 VideoInfo 1.03 - 查看影片進階資訊

Moo0 VideoInfo 1.03 - 查看影片進階資訊:

 綠色軟體/影音視聽 2011/11/27 17:18 by 哇哇




在網路上蒐藏了許多影片,許多人可以將影片檔案容量變小,卻又可以保持高畫質,還真是好奇是怎樣的壓縮技術,自己轉檔一直測試的話可能要花上許多的時間,這時候可以試試看這個小軟體,能解析出影片中的所有細節資訊,在轉檔之前先學習別人的設定吧!

將影片檔案拖曳的軟體當中,就可以查看詳細的影片資訊,包含了檔案名稱、檔案大小、影片格式、影片長短、編碼方式、影片解析度與聲音等等的資訊,內容還頗多的,詳細的資訊我都還不太瞭解呢!而附加了複製資訊的功能,當分享影片的時候不如就輸出這樣的資訊,下載的人也能知道影片的狀態唷!

http://www.moo0.com/software/VideoInfo/

引用網址:http://portable.easylife.tw/trackback/2873

星期日, 11月 27, 2011

[MFC] 繪圖時去除閃爍




1. 專案加入 memdc.h
from Here

2. 在 stdafx.h加入下一行
 #include "memdc.h"

3. 修改訊息  WM_ERASEBKGND的回應 如下:
BOOL CExampleView::OnEraseBkgnd(CDC* pDC) {       return FALSE; }
4.修改OnDrae的程式碼,如下
void CExampleView::OnDraw(CDC* dc) {     CMemDC pDC(dc);     CExampleDoc* pDoc = GetDocument();     ASSERT_VALID(pDoc);     // TODO: add draw code for native data here - use pDC      //as the device context to draw to }

星期一, 7月 04, 2011

[VS2010] VC常用快速鍵

Ctrl+]               在括號間移動(游標須在括號旁邊)
Ctrl+'-'             移到游標先前所在位置
Ctrl+Shift+'-'       與上面相反
Ctrl+Shift+F         舊式的尋找工具
Ctrl+Tab             循環已開啟視窗
Ctrl+F3              尋找目前所選的文字
Ctrl+L               刪除目前行
Ctrl+W               選取文字(或一段空白)
Ctrl+Up              立刻捲動視窗,不需移動游標
Ctrl+Down            立刻捲動視窗,不需移動游標

Ctrl+K,Ctrl+K 設定/取消 書籤 Ctrl+K,Ctrl+P 前往上一個書籤 Ctrl+K,Ctrl+N 前往下一個書籤
Ctrl+K,Ctrl+C 註解選擇文字或當前行 Ctrl+K,Ctrl+U 消去註解
Ctrl+K,Ctrl+F 格式化選取文字 Alt+F8 格式化選取文字
Ctrl+M,Ctrl+M 打開/關閉 程式區塊 Ctrl+M,Ctrl+O 關閉所有程式區塊
F12 移到變數或函式定義處 Shitf+F12 尋找變數的reference
Shift+Alt+Enter 全螢幕 Ctrl+Shift+V  開啟循環剪貼簿
Ctrl+Shift+R         錄製巨集 
Ctrl+Shift+P         播放巨集  

Alt+Shift+箭頭 以區塊選擇 Ctrl+Enter 上面增加空白行 Ctrl+Sfift+Enter 下面增加空白行
Ctrl+Shift+Comma(,) 字體縮小 (逗號加上Shift即是小於(<)符號) Ctrl+Shift+Period(.) 字體放大 (句號加上Shift即是大於(>)符號)

星期五, 4月 08, 2011

[知識] Non-deterministic Algorithm

Def: 
這類演算法在做任何事時,該演算法的下一步可能會有無限多件事可以選擇。 (Permitting more than one choice of next move at some step in a computation) 

1.演算法中每一個步驟的運算無法被唯一定義。

2.能夠執行非決定性演算法的機器,稱為非決定性的機器 (Non-deterministic Machine)。
  2-1 由於非決定性演算法在執行時,每一步可能有無限多件事要處理,故非決定性計算機器需假設有無限多個處理器可平行處理。因此,非決定性計算機器的計算能力比決定性計算機器要強大。
  2-2 但是,實際上並不存在此種機器。

Non-deterministic Algorithm的執行步驟分成兩個階段:
1.猜測階段(Guess)
  由於沒有一個既定的程序來從事此階段的猜測工作,因此本階段是Non-deterministic
  對於本階段,我們只知道一件事:
  1-1 如果一個問題有正確解的話,此階段一定可以將這個正確解給猜出來;反之,若該問題沒有正確解的話,則此階段就會隨便給解答。
  1-2 至於猜測階段是怎麼將這個解答給找出來的,我們無從得知(不論所給的解是否為正確解) 。

2.驗証階段(Verification)
  將上一階段所猜出來的結果加以驗証是否為真 (True)

星期日, 4月 03, 2011

[旅遊] 319新竹一日蓋章行心得

1. 導航有時還是必要的。雖然地圖上路名大多有標示,不過在寶山的時候,路名跟地圖標示的不一樣,所以多走了一些冤枉路。而且有時候太小的路名也不會標示,遊憩是在山區時候。或是說比例尺太大,地圖沒有標示所有的部分,或是太小而沒有標示小路名,例如在湖口的部分。所以紙本地圖還是有缺點。而且雖然在市區都有標記的很清楚不過,地圖的印刷太雜亂有時候不容易找到路名,像是在新竹市區的時候。

2.在新竹市區看到很多鴿子跟SNG車,回來才發現是因為邱毅所發起的反霸凌示威遊行。

3.在台3線的時候,一路上好多重型機車,其中也有女騎士,不過是少數。在第一間小七,對面是一間萊爾富,停的都是重型機車,這邊小七只有自行車,可能是因為對面停車空間比較大的關係吧。

4.內灣不會很遠,下次可以去看看。

5.原來新湖口指的是湖口車站或是市中心的意思。

6.在新豐鄉蓋章的時候遇到一個怪人,雖然看起來不骯髒,不果衣服都破了,感覺就像是無業遊民。他看到我在蓋章,就過來想要分享心得,雖然我是沒看到他的印章簿,不過感覺他好像真的有在收集的樣子,連台鐵的100章都知道。不知道他怎麼收集的,看起來就不像是有錢的樣子。有些字也不太會寫的感覺,有時候一直重複剛剛講的話。感覺就是一個怪怪的人。

7.除了重機外,一路也發現許多自行車騎士,腿都好壯,我想除非我友好自行車,否則要我這樣騎,我應該騎不遠,雖然我很喜歡騎車到處跑的感覺。可是要我單靠腳力,感覺還是太累了。

8.這次除了319章以外,其他的紀念章蓋的不多,雖然到了竹東的旅遊服務中心,不過那裏一個紀念章也沒有。只有在北埔的文化紀念館蓋了一些以前的古蹟章。因為這個館感覺就很無聊,那裏的工作人員也閒到不知道是在玩遊戲還是只是聽音樂,反正就感覺很爽的樣子,雖然說假日還要上班。

9.湖口往新埔因為沒有直接的道路,可能是因為新埔柿在山中間的平地的關係,所以需要越過山,偏偏道路標示的又不清楚。害我走錯路,雖然是最後還是到了,不過要是沒有手錶上的指南針,我看我八成會走很多冤枉路。不過令人意外的是,雖然新埔的外圍區都是山,大部分都是種茶葉的,不過在市中心感覺還挺熱鬧的,有許多連鎖的商店,那裏的中學生打扮也挺潮流的,有點令人意外。我一開始也很懷疑,這麼山區且有沒有多少觀光資源的地方真的會有小七嗎,沒想到真的有,還有兩間。也幸好有,不然我真的會很失望。不知道為什麼這個地方會有這麼多消費族群可以撐得起這麼多店家。總而言之,新埔跟湖口不應該放在一起蓋,因為這兩個鄉鎮沒有直接連市中心的幹道,應該把新埔鎮放第一位,湖口放最後才對。真是失策,不過因為一開始來不及規畫路線就直接走,所以會發生這樣的情況也是不意外。

蓋章路線
關西 -> 橫山 -> 竹東 -> 北埔 -> 寶山 -> 東區 -> 香山區 -> 北區 -> 竹北 -> 新豐 -> 湖口 -> 新埔

尖石、五峰、峨嵋因為沒有小七而且找店家有點麻煩,所以等下次非假日直接到市公所蓋章好了。

星期四, 3月 24, 2011

[知識] SIFT

SIFT算法的教程、原始碼及應用軟件

1、ubc:DAVID LOWE---SIFT算法的創始人,兩篇經典的文章
http://www.cs.ubc.ca/~lowe/

2、cmu:YanKe---PCASIFT,總結的SIFT方面的文章SO全,超經典
http://www.andrew.cmu.edu/user/yke/

3、ubc:MBROWN---SIFT算法用於圖像拼接的經典應用autopano-sift,包括一個SIFTLIB庫
http://www.cs.ubc.ca/~mbrown/autostitch/autostitch.html
http://www.cs.ubc.ca/~mbrown/panorama/panorama.html

4、toronto:Jepson---Matlab SIFT tutorial, 超級超級超級經典~
http://www.cs.toronto.edu/~jepson

5、ucla:Vedaldi---加州大學一個博士生編的SIFT,Matlab、C的都有,但沒用過
http://www.cs.ucla.edu/~vedaldi/

6、一個小的拼接軟體ptasmblr
http://www.tawbaware.com/ptasmblr.htm

轉自 http://summerstation.spaces.live.com/blog/cns!e39c001cb6e4b188!1501.entry

星期二, 12月 14, 2010

[MFC] CImage 直接存取記憶體

//for 8-bit 影像
byte* pRealData=(byte*)m_Image.GetBits(); //取得記憶體開頭
int pit=m_Image.GetPitch(); //每一行的記憶體寬度
for (int y=0; y< Height;y++){
for (int x=0; x< Width;x++){
pRealData[ pit*y + x] = Intensity;

}}

//for 24-bit 影像

byte* pRealData=(byte*)SaveImg.GetBits();
int pit=SaveImg.GetPitch();
int bitCount=3;
for (int y=0; y< height; y++) {
for (int x=0; x< width; x++) {
pRealData [ pit*y + x*bitCount] = R ;
pRealData [ pit*y + x*bitCount+1] = G ;
pRealData [ pit*y + x*bitCount+2] = B;
}}

星期一, 11月 29, 2010

[MFC] Multithread

//Thread function 內容
UINT  MyThreadFun(LPVOID LParam)
{
        MyThreadInfo *pInfo1=(MyThreadInfo*) LParam;
        CTESTDlg *hWnd=(CTESTDlg*)CWnd::FromHandle(pInfo1->Wnd);
        CSliderCtrl *slider=(CSliderCtrl*)hWnd->GetDlgItem(IDC_SLIDER1);

        slider->SetLineSize(100);   // 設定 slider 大小
        for(int i=0;i<100;i++){
           slider->SetPos(i);   // 移動 slider
           Sleep(100);          // 暫停 thread
         }

         return(0);
}


//如果希望 thread function 能放在 class 中, 請宣告它為 static
class CTESTDlg : public CDialog {  
     static UINT MyThreadFun(LPVOID LParam);
};

///////////////////////////////////////////////////////////////

//Dialog按鈕程式碼
//開始 Tread
struct MyThreadInfo{
HWND hWnd;        // 紀錄產生 thread 的視窗物件
}Info1;

void CTESTDlg::OnBnClickedOk()
{
        Info1.hWnd=this->m_hWnd;   // 紀錄 Dialog 的window handle
        AfxBeginThread(MyThreadFun, (LPVOID)&Info1);
}


星期二, 11月 16, 2010

目前貼程式碼的方案

SyntaxHighlighter 3.0.83
簡單來說,在程式碼的前後各貼上

<pre class="brush: js">



</pre>

[MFC] Unicode環境下使用CStdioFile來存取中文檔案

因為CStdioFile並不支援Unicode所以無法存取Uncode檔案,而當存取ANSI檔案時又因為Unicode環境下而造成無法使用CStdioFile::ReadString()所讀到的CString。所以加入下面一行程式碼來設定讀入的檔案的地區編碼。

setlocale( LC_CTYPE,"cht" );
如果是簡體中文則將cht改為chs。
其他參考文章:
解决UNICODE字符集下CStdioFile的Writestring无法写入中文的问题
Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI 


[MFC] CImage的簡單複製方法 (Copy CImage)

BOOL ImageCopy(const CImage &srcImage, CImage &destImage)
{
 int i,j;//循環變量
 if(srcImage.IsNull())
 return FALSE;
 //原始影像參數
 BYTE* srcPtr=(BYTE*)srcImage.GetBits();
 int srcBitsCount=srcImage.GetBPP();
 int srcWidth=srcImage.GetWidth();
 int srcHeight=srcImage.GetHeight();
 int srcPitch=srcImage.GetPitch(); 
 //銷毀原有圖像

 if( !destImage.IsNull())
 {
  destImage.Destroy();
 }
 //創建新圖像
 if(srcBitsCount==32)   //支援alpha通道
 {
  destImage.Create(srcWidth,srcHeight,srcBitsCount,1);

 }
 else
 {
  destImage.Create(srcWidth,srcHeight,srcBitsCount,0);
 }



 //加載調色板
 if(srcBitsCount<=8&&srcImage.IsIndexed())//需要調色盤
 {
  RGBQUAD pal[256];
  int nColors=srcImage.GetMaxColorTableEntries();
  if(nColors>0)
  {
   srcImage.GetColorTable(0,nColors,pal);
   destImage.SetColorTable(0,nColors,pal);//複製調色盤
  } 
 } 

 //目標影像參數
 BYTE *destPtr=(BYTE*)destImage.GetBits();
 int destPitch=destImage.GetPitch();
 //複製影像數據

 for(i=0 ; i<srcHeight;i++)
 {
  memcpy( destPtr+i*destPitch, srcPtr+i*srcPitch, abs(srcPitch) );
 } 
 return TRUE;
}

星期一, 10月 25, 2010

[攝影] 利用Photoshop做數位黑卡

前置作業:
1. 在Photoshop中同時開啟亮片與暗片。


2. 點選暗片後按Ctrl+A(全選),再按Ctrl+C(拷貝),之後就可以關閉暗片的檔案,你已
經用不到暗片了。


3. 點選亮片後按Ctrl+V(貼上),前置作業完成。


繼續:
1. 在LAYER對話框(PALLETE)中先點選第一層也就是暗片的部分,然後點選對話盒最下方,由左邊數來第二個圖示(Add Vector Mask),這時在第一層會出現一個白色的矩形。

2. 在LAYER對話盒點選第二層也就是BACKGROUND的部分,按Ctrl+A(全選),再按Ctrl+C(拷貝)。

3. 按住ALT同時點選在第一步驟時出現的白色長方形,這時畫面會變成白色,再按Ctrl+V(貼上),你會看到黑白影像。

4. 到 Filter / Blur / Gaussian Blur ,把 Radius 設為 40 pixels。

5. 到LAYER對話盒點選BACKGROUND,你就可以看到合成完成的影像。

6. 到 Image/ Adjustment / Shadow/Highlight 將SHADOW值設為24,或其他你認為適當的數值。

7. 回到LAYER對話盒,按上方最右邊的箭頭,將會出現選單,選擇Flaten Image就大功告成了。



引用來源 中文 英文

星期六, 5月 22, 2010

[心情] 我和她

在我與妳的世界中有著一條虛數軸,看不見。卻一直引領著我離妳越來越遠。

星期四, 4月 01, 2010

[旅遊] 2010-04-01 平溪一日遊

花費:
    食:早餐-飯糰15+飲料20 午餐-肉絲蛋炒飯50 晚餐-東北角70 飲料-20*2
    行:車票-平溪來回 240 菁桐往平溪-15*2
    其他:十分瀑布門票-70
    總計:535元

感想:
還算可以,感覺很多人出來會比較好玩。太陽太大很熱,不過沒太陽時風景又很難拍。說到老街,其實大部分都給人一個感覺,就是賣的都是玩的,吃的。其實從來就不曾喜歡過。與其說是到平溪逛老街,我想,是跟朋友一起出去的感覺成分居多。
比較好的是風景,天氣好的話拍起來真的很不錯。例如下面的瀑布。而最重要的 一點,雖然太陽光很重要,不過太亮也不好。所以最好準備減光鏡或是偏光鏡,這樣才能拍出更好看的照片。
十分瀑布

星期日, 1月 04, 2009

[MFC] CSrollView的 ScrollBar

1 OnInitialUpdate()函式裡的sizeTotal.cx=sizeTotal.cy 值要設定

2. CSize sizeTotal(Getx(),Gety());
SetScrollSizes(MM_TEXT, sizeTotal);

[VS2005] 怎樣添加事件、映射消息和重載函數

VS2005 的 MFC 添加事件、映射消息和重載函數的操作 和 VS6.0 不一樣,是在類別的屬性頁裡。操作如下:

在「類別檢視」中,右鍵單擊想要操作的類別,點擊「屬性」。在打開的屬性頁中,最上一排按鈕中的「事件」、「訊息」和「覆寫」分別對應「添加事件」、「映射消息」和「重載函數」的操作。

星期六, 1月 03, 2009

[MFC] 全螢幕功能-開始工作列未消失

原因是OnGetMinMaxInfo這個函式沒有被OverRide,
,最好是用ClassWizard,不要用手動。因為很可能會沒有效果。
要重寫此函式的原因如下:

程序中有一個地方要說明一下,那就是OnGetMinMaxInfo函數的作用。你可以試一下,如果把這個函數去掉,則當你按下工具欄中的全屏顯示按鈕時,框架視圖確實變大了,但沒有想像的那樣實現全屏顯示,底邊留下一個狀態欄——一個有些發育不良的全屏顯示窗口。為什麼會這樣呢?經過調試後,發現問題出在WM_GETMINMAXINFO消息的處理上。在Windows中,無論什麼時候以何種方式改變窗口的尺寸或大小,是拖拽窗口邊緣也好,或是在代碼中調用改變窗口尺寸的函數也好,總之不管你用什麼方法,Windows都會首先發送WM_GETMINMAXINFO消息。這個消息的意思是說:「嘿,如果你要強迫我的尺寸變大或變小,就附上詳細的MINMAXINFO結構信息,否則我用默認值處理。」大多數應用程序都不用顯式處理這個 WM_GETMINMAXINFO消息(也就是說讓DefWindowProc窗口過程進行缺省處理),而Windows在進行缺省處理時是不會讓一個窗口視圖比屏幕還大的,所以我們會碰上前面講的那個問題。解決的方法是:不要讓Windows對WM_GETMINMAXINFO消息進行缺省處理,而是由我們自己處理,方法如下:

void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
{
 if (m_bFullScreen)
 {
  lpMMI->ptMaxSize.y = m_FullScreenWindowRect.Height();
  lpMMI->ptMaxTrackSize.y = lpMMI->ptMaxSize.y;
  lpMMI->ptMaxSize.x = m_FullScreenWindowRect.Width();
  lpMMI->ptMaxTrackSize.x = lpMMI->ptMaxSize.x;
 }
 //CFrameWnd::OnGetMinMaxInfo(lpMMI);
}