BTC的運作方式,以下由程式碼轉成一般人能看的語言
首先 要決定區塊大小 實驗中以 4 * 4 為單位
然後抽取影像中的4x4區塊 而且會重疊
抽取之後,取其所有元素的平均值 sum()/16;
將區塊大於平均值的數設為1小於的數設為0並型成一個 "1的位元矩陣".
在將其中有1的值加總後得到一個值k
1位元矩陣乘上原始區塊並加總之後除以K就可以得到屬於1的"平均數"
在將"1的位元矩陣"取反閘(not)之後 就可以得到 "0的位原矩陣"
在求0位元矩陣乘上原始區塊並加總之後除以K就可以得到屬於0的"平均數"
在製造三個舉陣
m_H 存放1的平均數
m_L 存放0的平均數
matrice存放"1的位元矩陣"最後會的到和原影像相同大小 "1的位元矩陣"
即完成壓縮
解壓縮就以"位元矩陣"乘上m_H or m_L的平均數 即會還原影像.
星期日, 11月 20, 2005
C/C++ 檔案輸入/出
7.4二進位檔案的輸入/輸出
要存取檔案的二元(binary)資料,首先必須指定開啟模式為ios::binary,一旦檔案開啟模式為binary,則所有的資料將以二進位形式存檔,就算是空白字元,tab字元,或是換行字元,都會以字元的二進位形式存檔,整數、浮點數就分別以其資料型別所佔的位元空間來儲存二進制資料,不管資料內容是什麼都不會作字元自動轉換。
put() 和 get()
除了宣告檔案輸入/輸出物件開啟模式為ios::binary外,我們還需要一些專屬於檔案物件的函式來存取二進制資料(有時也稱為非格式化資料),兩個最基本的函式是不可或缺的:
put(char)
get(char)
這兩個函式提供以字元存取的方式來使用非格式化資料。其中get( )函式屬於ifstream的成員函式,功能是從二進制檔案中讀取一個字元;而put( )則屬於ofstream的成員函式,功能是將一字元寫入二進制檔案中。
下面的程式為顯示檔案內容(“ex2.txt”)到螢幕上,並且判斷是否包含文字或二進位資料. 它使用get( ) 函式.
範例程式7-7使用put( )將ASCII碼0到255所對應的所有字元寫入檔案中。由於ASCII碼只使用一半作為可見的字元,另一半則是延伸字元集並且包含一些特殊符號和控制碼。
/*----------------------------------------------------*/
// 範例程式7-7
// 使用put( )函式
// 陳慶瀚,2001
/*----------------------------------------------------*/
#include "fstream.h"
void main()
{
char c;
ofstream out("ex2.txt", ios::binary); //宣告一個二進制的輸出檔案物件
for(int i=0; i<256; i++)
{
c = (char) i; //將整數轉為字元
out.put(c); //使用out的成員函式將單一字元存入二進制的檔案中
}
out.close();
}
執行這個程式,隨後開啟ex2.txt,你應該看到類似下列的結果
......!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~????????????????﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪圴佮迓玿旂衲欶......
除了英數字之外,看起來還夾雜著很多的亂碼,這些都是ASCII碼中不可見字元或特殊符號。
/*----------------------------------------------------*/
// 範例程式7-8
// 使用get( )函式
// 陳慶瀚,2001
/*----------------------------------------------------*/
#include
void main()
{
char ch;
ifstream in("ex2.txt", ios::binary); // 宣告一個二進制的輸入檔案物件
while(in)
//如果檔案物件指標指向檔案底端,則in傳回0,迴圈中斷
{
in.get(ch); //使用in的成員函式get()讀取一個字元
cout << ch;
}
}
read( ) 和 write( )
如果我們想對大量的二進制資料進行存取,fstream提供另外兩個成員函式:
istream &read(char *buf, int num);
ostream &write(const char *buf, int num);
ifstream的read( )函式從檔案一次讀取num 個字元,然後用把他們放入buf中;ofstream的write( )函式則是經由buf將num個字元一次寫入到檔案中。
範例程式7-9和7-10展示如何使用read( )和write( )。
/*----------------------------------------------------*/
// 範例程式7-9
// 使用write()一次寫入一個區塊資料
// 陳慶瀚,2001
/*----------------------------------------------------*/
#include
void main()
{
int buf [5] = {1, 2, 3, 4, 5};
ofstream out("test", ios::binary);
if(!out) //檔案開啟失敗
{
cout << "無法開啟檔案\n";
return;
}
//將buf由int型別轉為char型別,再經由out的成員函式write()寫入檔案
out.write((char *) &buf, sizeof(buf));
out.close();
}
執行這個程式,buf所含的字元資料會非常有效率的被寫入binary檔案中,如果你用文字編輯器把ex3.txt打開來看,你可能會看到如下結果:
似乎與相像中的結果不大一樣,這是因為binary檔案不適合以ASCII文字編輯器來閱覽,如果你使用範例程式7-10將檔案以binary模式開啟,再將資料讀入,就可以確認資料內容與寫入時是完全一致的。
/*----------------------------------------------------*/
// 範例程式7-10
// 使用read()將區塊資料一次讀取
// 陳慶瀚,2001
/*----------------------------------------------------*/
#include
void main()
{
int buf[5]={0,0,0,0,0}; //將buf初值設為0
ifstream in("test", ios::binary); //宣告檔案物件的開啟模式為binary
// 以區塊字元的格式讀取,再放入buf
in.read((char *) & buf, sizeof buf);
for(int i=0; i<5; i++) // 將buf陣列資料顯示在螢幕
{
cout << buf [i] << " ";
}
in.close();
}
要存取檔案的二元(binary)資料,首先必須指定開啟模式為ios::binary,一旦檔案開啟模式為binary,則所有的資料將以二進位形式存檔,就算是空白字元,tab字元,或是換行字元,都會以字元的二進位形式存檔,整數、浮點數就分別以其資料型別所佔的位元空間來儲存二進制資料,不管資料內容是什麼都不會作字元自動轉換。
put() 和 get()
除了宣告檔案輸入/輸出物件開啟模式為ios::binary外,我們還需要一些專屬於檔案物件的函式來存取二進制資料(有時也稱為非格式化資料),兩個最基本的函式是不可或缺的:
put(char)
get(char)
這兩個函式提供以字元存取的方式來使用非格式化資料。其中get( )函式屬於ifstream的成員函式,功能是從二進制檔案中讀取一個字元;而put( )則屬於ofstream的成員函式,功能是將一字元寫入二進制檔案中。
下面的程式為顯示檔案內容(“ex2.txt”)到螢幕上,並且判斷是否包含文字或二進位資料. 它使用get( ) 函式.
範例程式7-7使用put( )將ASCII碼0到255所對應的所有字元寫入檔案中。由於ASCII碼只使用一半作為可見的字元,另一半則是延伸字元集並且包含一些特殊符號和控制碼。
/*----------------------------------------------------*/
// 範例程式7-7
// 使用put( )函式
// 陳慶瀚,2001
/*----------------------------------------------------*/
#include "fstream.h"
void main()
{
char c;
ofstream out("ex2.txt", ios::binary); //宣告一個二進制的輸出檔案物件
for(int i=0; i<256; i++)
{
c = (char) i; //將整數轉為字元
out.put(c); //使用out的成員函式將單一字元存入二進制的檔案中
}
out.close();
}
執行這個程式,隨後開啟ex2.txt,你應該看到類似下列的結果
......!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~????????????????﹜ㄓ它夾帚型陋秣捲陷絮溢劃遞蝨螃謝藥齪圴佮迓玿旂衲欶......
除了英數字之外,看起來還夾雜著很多的亂碼,這些都是ASCII碼中不可見字元或特殊符號。
/*----------------------------------------------------*/
// 範例程式7-8
// 使用get( )函式
// 陳慶瀚,2001
/*----------------------------------------------------*/
#include
void main()
{
char ch;
ifstream in("ex2.txt", ios::binary); // 宣告一個二進制的輸入檔案物件
while(in)
//如果檔案物件指標指向檔案底端,則in傳回0,迴圈中斷
{
in.get(ch); //使用in的成員函式get()讀取一個字元
cout << ch;
}
}
read( ) 和 write( )
如果我們想對大量的二進制資料進行存取,fstream提供另外兩個成員函式:
istream &read(char *buf, int num);
ostream &write(const char *buf, int num);
ifstream的read( )函式從檔案一次讀取num 個字元,然後用把他們放入buf中;ofstream的write( )函式則是經由buf將num個字元一次寫入到檔案中。
範例程式7-9和7-10展示如何使用read( )和write( )。
/*----------------------------------------------------*/
// 範例程式7-9
// 使用write()一次寫入一個區塊資料
// 陳慶瀚,2001
/*----------------------------------------------------*/
#include
void main()
{
int buf [5] = {1, 2, 3, 4, 5};
ofstream out("test", ios::binary);
if(!out) //檔案開啟失敗
{
cout << "無法開啟檔案\n";
return;
}
//將buf由int型別轉為char型別,再經由out的成員函式write()寫入檔案
out.write((char *) &buf, sizeof(buf));
out.close();
}
執行這個程式,buf所含的字元資料會非常有效率的被寫入binary檔案中,如果你用文字編輯器把ex3.txt打開來看,你可能會看到如下結果:
似乎與相像中的結果不大一樣,這是因為binary檔案不適合以ASCII文字編輯器來閱覽,如果你使用範例程式7-10將檔案以binary模式開啟,再將資料讀入,就可以確認資料內容與寫入時是完全一致的。
/*----------------------------------------------------*/
// 範例程式7-10
// 使用read()將區塊資料一次讀取
// 陳慶瀚,2001
/*----------------------------------------------------*/
#include
void main()
{
int buf[5]={0,0,0,0,0}; //將buf初值設為0
ifstream in("test", ios::binary); //宣告檔案物件的開啟模式為binary
// 以區塊字元的格式讀取,再放入buf
in.read((char *) & buf, sizeof buf);
for(int i=0; i<5; i++) // 將buf陣列資料顯示在螢幕
{
cout << buf [i] << " ";
}
in.close();
}
星期日, 9月 25, 2005
Opera OR FireFox
是哪套流覽器好用?
FireFox 還是Opera?
http://my.opera.com/community/
http://moztw.org/
比較有趣的是Opera有聲控的功能,只要拼音拼的出來的,唸出來他就可以動,我把exit 改成Fuck
果然關了,哈哈.
不過實用性還是Firefox 可以使用Delicious 當書簽,這就有差.
FireFox 還是Opera?
http://my.opera.com/community/
http://moztw.org/
比較有趣的是Opera有聲控的功能,只要拼音拼的出來的,唸出來他就可以動,我把exit 改成Fuck
果然關了,哈哈.
不過實用性還是Firefox 可以使用Delicious 當書簽,這就有差.
星期六, 9月 24, 2005
JAVA & 頭很大
雖然電腦裡開的是Eclipse,手上敲出來的語法是JAVA,但是對JAVA的許許多多的東西確不是非常的瞭解,光是在網路上的API,有時候確有看沒有懂,更別說其他的東西,所以為了讓自己更加得專注在這樣的東西上面,就來多多去研究去發掘.
星期二, 8月 02, 2005
星期日, 7月 31, 2005
專案執行 cont.
完成應用程式後還要許多動作,進行測試,按照測試文件一步一步的動作,並記錄下來,由其是我們開發的pocket pc 給別人的檔案也必要要給清楚東西,最好自己先試過之後,在壓縮起來給別人,當一切都ok了之後才給soucrce code.
文件真的很重要
文件真的很重要
專案執行
這次有一個接case的機會,讓我加加經驗值,做這個東西之前,我不會c#,不會sybase,沒有database的實戰經驗,只有爽快而已,不過這是一次很重要的經驗,首先整個組合裡沒有人接過這樣的case,也沒接過,做這樣的事,似乎膽子太大了點.
拿到這開發文件後有許多注意的要點在這之後要慢慢的記下來:
首先這是個很多畫面的應用程式,而真的需要這樣多的人力去開發嗎?第一次用C#,第一次拉那麼多的試窗介面,我們浪費很多的時間去試了很多東西,才得到了一些結果.
畫面分析:
畫面是很多沒錯,但是功能都差不多,而且如果一開始對這些都很默生的話,那必須集中人力去針對某些細節去討論,當完成了一個基礎的雛形後,就開始為程式的命名方式,寫做方法,做個規化,當討論到一個結果後就可以針對類似的畫面做苦功了,一個人做苦功常常會比分出兩三個人快,類似頁面,也比較能掌握命名方式.
分工合作:
由一個主要的人去領導,去掌握是一見重要的事,很多人只會做,就像球員一樣,但是缺少一個教練,後衛,跑壘指導員的話,多多少少是盲目的,而這樣的人不一定要是一個很會做的人,但是他是要能看出缺點.問題.和指導出方向,所以經驗是很重要的.
文件的寫作:
大部份的人都還沒有寫做文件的習慣,我也是!!雖然說能把事情解決,但是將文件製造出來卻是個問題,有可能寫出來的東西七零八落,這必須多學習一些相關的課程才能去好好的改善.首先機本上由開發文件所製造出的問題,由條例式的列出,並向PL解決.在來就是研發過程中技術上解決方式的文件寫作,有可能當下因趕案件而沒寫,但事後這必須補齊,才能當作這整個case的結束.
這次雖然不是由設計到開發整個流程,但確是實戰的一個很大的體驗,很多東西也是面臨到才去解決的,而這次的裝備卻可能是下次一路順風的開始.
拿到這開發文件後有許多注意的要點在這之後要慢慢的記下來:
首先這是個很多畫面的應用程式,而真的需要這樣多的人力去開發嗎?第一次用C#,第一次拉那麼多的試窗介面,我們浪費很多的時間去試了很多東西,才得到了一些結果.
畫面分析:
畫面是很多沒錯,但是功能都差不多,而且如果一開始對這些都很默生的話,那必須集中人力去針對某些細節去討論,當完成了一個基礎的雛形後,就開始為程式的命名方式,寫做方法,做個規化,當討論到一個結果後就可以針對類似的畫面做苦功了,一個人做苦功常常會比分出兩三個人快,類似頁面,也比較能掌握命名方式.
分工合作:
由一個主要的人去領導,去掌握是一見重要的事,很多人只會做,就像球員一樣,但是缺少一個教練,後衛,跑壘指導員的話,多多少少是盲目的,而這樣的人不一定要是一個很會做的人,但是他是要能看出缺點.問題.和指導出方向,所以經驗是很重要的.
文件的寫作:
大部份的人都還沒有寫做文件的習慣,我也是!!雖然說能把事情解決,但是將文件製造出來卻是個問題,有可能寫出來的東西七零八落,這必須多學習一些相關的課程才能去好好的改善.首先機本上由開發文件所製造出的問題,由條例式的列出,並向PL解決.在來就是研發過程中技術上解決方式的文件寫作,有可能當下因趕案件而沒寫,但事後這必須補齊,才能當作這整個case的結束.
這次雖然不是由設計到開發整個流程,但確是實戰的一個很大的體驗,很多東西也是面臨到才去解決的,而這次的裝備卻可能是下次一路順風的開始.
星期六, 7月 09, 2005
VS .NEt & Eclipse
星期一, 7月 04, 2005
星期三, 6月 29, 2005
開發文件寫作
還沒有什麼頭序寫東西,但是這學期發現了一些問題
1.設計文件業怎樣寫
2.報計畫時的一些需求文件
3.如何去描述自己的專案
看了一本C#的書,我想先試看看他裡面的一些方法:
1.初步調查(可能是一通電話,一些想法,一些需求)
2.分析(資料收集)
3.設計(輸出設計,輸入設計)
4.開發
5.實作
6.稽查與維護
通常接到case大部份都是一些敘述和幾個特定功能的條例式:
一開始是序述基本的功能,在來條例式的把系項目給撰寫出來,比如說
1.程式將提供親切的使用者介面
2.能輸入使用者學生科系-xx之類的
以此類推
最後在加上一個簡單的範例加強設計後的樣式,最好還有圖表
最後將這些內容改成需求規格書,exsmaple:
一般說明:
程式介面:
包括
*三個選項,分出三個科系
*什麼按紐做些什麼事之類的
系統輸入: 運作規則:
大概分這些類
就可以依此先設計出外型,當然也就會有這些程式的文件,在來就市處理的設計,將所有的資料改成我們看的懂的邏輯圖,更方變撰寫程式,之後就進入開發階段,當然邊開發就可以找出些當時設計文件的問題,這些也要製成文件存參,什麼樣的問題用什麼樣的方式解決,之後即可以完成一個project,最後就是QA了.把自己的程式給別人去測試,最後就會有不一樣的結果.
1.設計文件業怎樣寫
2.報計畫時的一些需求文件
3.如何去描述自己的專案
看了一本C#的書,我想先試看看他裡面的一些方法:
1.初步調查(可能是一通電話,一些想法,一些需求)
2.分析(資料收集)
3.設計(輸出設計,輸入設計)
4.開發
5.實作
6.稽查與維護
通常接到case大部份都是一些敘述和幾個特定功能的條例式:
一開始是序述基本的功能,在來條例式的把系項目給撰寫出來,比如說
1.程式將提供親切的使用者介面
2.能輸入使用者學生科系-xx之類的
以此類推
最後在加上一個簡單的範例加強設計後的樣式,最好還有圖表
最後將這些內容改成需求規格書,exsmaple:
一般說明:
程式介面:
包括
*三個選項,分出三個科系
*什麼按紐做些什麼事之類的
系統輸入: 運作規則:
大概分這些類
就可以依此先設計出外型,當然也就會有這些程式的文件,在來就市處理的設計,將所有的資料改成我們看的懂的邏輯圖,更方變撰寫程式,之後就進入開發階段,當然邊開發就可以找出些當時設計文件的問題,這些也要製成文件存參,什麼樣的問題用什麼樣的方式解決,之後即可以完成一個project,最後就是QA了.把自己的程式給別人去測試,最後就會有不一樣的結果.
星期四, 4月 21, 2005
又開工了....這是新的開始
我開始認識MPEG的一天
剛開始對影像檔案並不了解
雖然說現在還是差不多
不過已經知道了一些東西
MPEG的影像是有一定格式的
比如說
00 00 01 xx
就帶表了某些影像或相關資訊的開始
這是以16進位的表示來看的
在來就是還沒壓縮的影像
yuv & rgb
rgb 是 r & g & b 一連串的 一個byte 接byte 上次玩的rgb影像是這樣沒錯!!
而
yuv 是 y u v 三種元素每一種元素串流之後接連串下一種元素
這樣講起來挺模糊的,而且現在也懶的打太多字
改天杯
不過這幾天要開始寫FGS的自調串流伺服器
真給他頭痛
socket也還沒弄好一些基本的.... 進度緩慢 ...><" 太嫩了
剛開始對影像檔案並不了解
雖然說現在還是差不多
不過已經知道了一些東西
MPEG的影像是有一定格式的
比如說
00 00 01 xx
就帶表了某些影像或相關資訊的開始
這是以16進位的表示來看的
在來就是還沒壓縮的影像
yuv & rgb
rgb 是 r & g & b 一連串的 一個byte 接byte 上次玩的rgb影像是這樣沒錯!!
而
yuv 是 y u v 三種元素每一種元素串流之後接連串下一種元素
這樣講起來挺模糊的,而且現在也懶的打太多字
改天杯
不過這幾天要開始寫FGS的自調串流伺服器
真給他頭痛
socket也還沒弄好一些基本的.... 進度緩慢 ...><" 太嫩了
訂閱:
文章 (Atom)