第七個作業,是要將其聲音的音波顯示出來,
還要可以調整音量的大小,
可能是期末考的壓力,
讓我對最後一堂課有點心不在焉,
雖然說成功的將音樂播放,也將其音樂檔的相關內容都讀出來了,
可是要達成老師說要可調整音量大小、show其音波,
對我這個初學者而言,有點困難,
我不想上網查資料,因為那是別人的東西,
我倒希望藉由之後選修課程,將現在的不足彌補,
選擇其興趣,在去研讀更深造的東西。
老師要我們買的那本書,有簡單的應用,
而且看這本書時並不會有壓力,因為就像在閱讀一樣,很好玩,
了解其元件的應用,自己在實際操作,其實進步很快的,
老師也強調,要自己仔細的將程式碼好好想一遍,
這個方法真的很有用,
不但加強自己觀念更可以加強撰寫程式的能力,
我想把程式學好,而且漸漸的有在進步了,
除了老師平常細心教導之外,
朋友也願意將他們撰寫程式的邏輯與我分享。
2010年1月15日 星期五
hw06

關於這次的作業,
老師給了一個不用去計算byte的方法 ,
定義一個unsigned int wsize[1],
直接將值給存到wsize[0] ,
可以大幅縮減寫程式的時間,
原來只是一個資料型態的不同就可以差這麼多,
還真的是讓我大開眼界 ,
fread(wsize, 4, 1, imWAV),
iFileSize = wsize[0]+8, //計算過的檔案大小再加上誤差就正確了
至於要讀檔名的部分,我有詢問老師
因為讀出來之後RIFF後面會出現亂碼,
原來是因為沒有將後面指向NULL所以會亂取一些東西,造成亂碼的現象
fread(wriff, 1, 4, imWAV),
wriff[4]=NULL, //將其最後一個記憶體位置指向null

至於開音樂部份就類似於我們在開啟檔案的部分
MediaPlayer1->FileName=OpenDialog1->FileName,
MediaPlayer1->Open(),
其他部分就是一樣這樣讀取,
基本上 只要知道記憶體存放位置,沒有讀不出來的東西。
2010年1月14日 星期四
hw08
上課心得:
記得從一開學,第一次上老師的課是在CC棟,
關於第一節的課我到現在都還記的,Histogram! 直方圖,
老師一定覺得很奇怪為啥我要去記一個直方圖的英文,
因為,這堂課老師給我的感覺就是要帶給我們東西的,
所以我也想以認真的學習態度回報老師,不論是meta data(描述資料的資料 )
還是老師曾經親自教我的記憶體存放位置概念,我都有記住,
我很開心老師是個很貼近我們的老師,
上課會跟我們討論有關教學的課程,
會想找尋更是和我們得方式教學,
很願意讓我們發問願意讓我們拿分數,
只看我們願不願意,我相信同學們也一定這樣覺得。
記的有一次,老師在桌上睡著了,畢竟早上3堂+班會+下午,如果可以的話,
老師下次開課可以要求學校不要排那麼緊湊的時間。
在課程的安排上,我個人是覺得作業部分不會過分要求,
在安排上剛剛好,兩個禮拜一次作業對我們來說彈性已經很大了,
只不過,老師也可以嘗試用考試的方式(兩個禮拜一次作業,下兩個禮拜變考試(可考上上星期作業相關延伸))
這樣學習效果或許會比現在更好,畢竟現在學生沒考試的話很少主動去念書研讀的。
記得從一開學,第一次上老師的課是在CC棟,
關於第一節的課我到現在都還記的,Histogram! 直方圖,
老師一定覺得很奇怪為啥我要去記一個直方圖的英文,
因為,這堂課老師給我的感覺就是要帶給我們東西的,
所以我也想以認真的學習態度回報老師,不論是meta data(描述資料的資料 )
還是老師曾經親自教我的記憶體存放位置概念,我都有記住,
我很開心老師是個很貼近我們的老師,
上課會跟我們討論有關教學的課程,
會想找尋更是和我們得方式教學,
很願意讓我們發問願意讓我們拿分數,
只看我們願不願意,我相信同學們也一定這樣覺得。
記的有一次,老師在桌上睡著了,畢竟早上3堂+班會+下午,如果可以的話,
老師下次開課可以要求學校不要排那麼緊湊的時間。
在課程的安排上,我個人是覺得作業部分不會過分要求,
在安排上剛剛好,兩個禮拜一次作業對我們來說彈性已經很大了,
只不過,老師也可以嘗試用考試的方式(兩個禮拜一次作業,下兩個禮拜變考試(可考上上星期作業相關延伸))
這樣學習效果或許會比現在更好,畢竟現在學生沒考試的話很少主動去念書研讀的。
2009年11月26日 星期四
hw04

這次的作業,是要自己將圖片影像讀出來
讀完每個點的RGB再將其顯示在畫布上就大功告成了
其實這個作業跟之前的作業有相似之處,
如果稍微想一下就可以完成了
因為是要將每個點的RGB值讀出來
所以先用個for迴圈,再將其讀出的長寬設給變數
變成其FOR迴圈的條件,
for(j=iFileHeight;j>0;j--)
for(i=0;i
offset=offset+3; //記憶體存放位置 以3個BIT(RGB)為一個像素
}
這樣就可以成功將圖片讀出來囉,大功告成。
對於原本搞不懂記憶體存放位置等相關資訊的我弄了好久,
用pspad去看,加上老師上課提到的資訊拼拼湊湊,
終於懂9成了,我還發現如果使用另存新檔方式存放的圖片不能順利開檔(jpg->bmp),
有些同學好像也會,自己去猜好像是因為jpg檔式壓縮方式儲存的,所以轉檔可能會造成讀檔有問題(純屬猜測)。
最近,我覺得上課提問題很重要,
因為會提問題代表著自己知道哪邊不懂,意味著自己有去思考,
只是平常的我都不太敢問,但看著班上同學都會找老師問問題,
自己不禁也提起了勇氣把不懂的地方向老師請教,
我知道,
如果真的懂了,那種成就感是很快樂的。
2009年11月6日 星期五
HW03

這次作業是要將圖片的詳細內容給讀出來,
聽到老師說要讀記憶體位置,對於記憶體位置,真的有點給他搞不懂。
今天主要的課程是要使用fopen,fread,fseek。
老師說這是最基本的幾個指令
對於初學的我只能上網去查資料了
唯一有接觸過的只有fopen,用來開啟檔案,並且配合fclose來將指令關閉,避免浪費記憶體。
fread表面看起來就是"閱讀",沒錯!他就是閱讀fread(變數名稱,幾次,幾個,檔案名稱)
fseek則是尋找,我們這次得作業是拿來尋找要讀的記憶體位置的開頭,以指標的形式將他指向讀檔的開頭 fseek(檔案名稱,記憶體存放位置(開頭),SEEK_SET(指向這裡))
fseek先是將要讀記憶體的位置找到後,在使用fread將資料讀出來。
瞭解了大概做法之後就開始實做了
設變數部分我參考老師的設法,有使用byte、int、char
在課堂上其實我不是很了解這些設定的方式
是回到宿舍後才了解的,byte拿來接收讀到的byte
可能是沒用過吧 還真是不習慣。
接著就開始尋找讀檔位置了
聽老師說,可以在維基找到記憶體儲存位置
當然就上了維基
也找到了相關的記憶體存放位置
然後利用fseek將裏頭的資料取出來 ,接著就將它顯示在label中 。
其中:水平解析度和垂直解析度我卻讀不出來
當下也詢問老師,老師使用pspad將記憶體的存放圖show出來,發現維基上的存放位置竟然在pspad上出現是空的!! 這個地方我就不太懂了。
BYTE bSize[4]={0,0,0,0};
int iFileSize,iFileWidth,iFileHeight;
char cBuffer[3];
OpenPictureDialog1->Execute();
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName) ;
FILE *fp; //宣告檔案名稱
fp = fopen(OpenPictureDialog1->FileName.c_str(),"r") ; //檔案名稱,"r"//閱讀
fread(cBuffer, 1, 2, fp); //讀標頭檔
Label8->Caption=cBuffer;
fread(bSize, 1, 4, fp) ;
iFileSize = bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;
//將讀到的byte作運算
Label10->Caption=iFileSize;
fseek(fp,18,SEEK_SET);
fread(bSize, 1, 4, fp) ;
Label11->Caption=iFileWidth;
fseek(fp,22,SEEK_SET);
fread(bSize, 1, 4, fp) ;
FileHeight = bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;
fclose(fp); //關閉fopen
(上面只有部分程式碼,怕太多占版面)
2009年10月23日 星期五
HW02
這次的作業是要把彩色圖片變灰階,並且把讀到的位元顯示出來,
一開始我有想到是把色彩值做變化,
想說是不是把得到的色彩值除以2就可以了,
我記得好像125是灰色的
是有這樣想 可是卻不知道如何下手,
要如何讀色彩值當時的我是一竅不通,
後來老師公布了片段程式碼,
咦~原來指令跟中文意思是一樣的,
GetRValue//取的紅色的色彩值
GetGValue//取的綠色的色彩值
GetBValue//取的藍色的色彩值
去讀每個點的RGB值,然後做些運算
開始 先得知圖片的長寬 因為每個像素就是一個X,Y
所以一定要使用FOR 迴圈來讀取每個像素點
一切都很順利可以讀到每一個點並且將其直存到node的變數裡頭
奇怪的是,圖片的顏色怪怪的,部分是灰階色彩,部分卻變成有如曝光般的顏色

以下是我的程式碼:
int X,Y,node;
for(X=1;X<801;x++) y="1;Y<601;y++)" node="(GetRValue(Image1-">Canvas->Pixels[X][Y])
//Pixels[X][Y]) 位於(X,Y)座標的像素
+GetGValue(Image1->Canvas->Pixels[X][Y])
+GetBValue(Image1->Canvas->Pixels[X][Y]))/2;
Image2->Canvas->Pixels[X][Y]=RGB(node,node,node);
}
吼~原來,因為一次是讀RGB三個點的關係,所以要除以3才對。
聽同學說 老師有講,喔不= = 我不是故意沒聽到的!!
可是最後作出來的時候,有種爽快感呢!!

成功!!
一開始我有想到是把色彩值做變化,
想說是不是把得到的色彩值除以2就可以了,
我記得好像125是灰色的
是有這樣想 可是卻不知道如何下手,
要如何讀色彩值當時的我是一竅不通,
後來老師公布了片段程式碼,
咦~原來指令跟中文意思是一樣的,
GetRValue//取的紅色的色彩值
GetGValue//取的綠色的色彩值
GetBValue//取的藍色的色彩值
去讀每個點的RGB值,然後做些運算
開始 先得知圖片的長寬 因為每個像素就是一個X,Y
所以一定要使用FOR 迴圈來讀取每個像素點
一切都很順利可以讀到每一個點並且將其直存到node的變數裡頭
奇怪的是,圖片的顏色怪怪的,部分是灰階色彩,部分卻變成有如曝光般的顏色

以下是我的程式碼:
int X,Y,node;
for(X=1;X<801;x++) y="1;Y<601;y++)" node="(GetRValue(Image1-">Canvas->Pixels[X][Y])
//Pixels[X][Y]) 位於(X,Y)座標的像素
+GetGValue(Image1->Canvas->Pixels[X][Y])
+GetBValue(Image1->Canvas->Pixels[X][Y]))/2;
Image2->Canvas->Pixels[X][Y]=RGB(node,node,node);
}
吼~原來,因為一次是讀RGB三個點的關係,所以要除以3才對。
聽同學說 老師有講,喔不= = 我不是故意沒聽到的!!
可是最後作出來的時候,有種爽快感呢!!

成功!!
2009年10月5日 星期一
HW01

1.首先先開啟BMP檔

2.接著點選SET->COLOR選擇線條顏色

3.選擇顏色

4.成功在圖上畫下了許多線條
這次是我第一次用c++ builder來讀取圖片甚至是要在圖片上作線條,還記得剛聽老師說要在上面作線條時我還蠻好奇的。一開始要放入一個OpenPictureDialog的物件,他是用來開起圖片檔案的物件 ,將他加入form裡頭後就可以開始用程式碼來達成開檔的目的,先加入
openPictureDialog1->Execute() //如果元件被執行,(execute執行之意)
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName)
//在Image1的picture裡面讀入一個剛剛開啟的圖片的檔名,這樣就能將圖片show在Image的picutre裡面了。
接著還要放入ColorDialog這個元件,我是把它放到MainMeun的第二的位置我將它命名為set,裡頭有個color,這個元件用來選擇顏色,第一個位置是放file,裡頭還有個我命名為open用來開啟圖片檔的。
接著我要在colorclick這個狀態下打入呼叫ColorDialog元件的程式碼
ColorDialog1 -> Execute(); //如果ColorDialog被執行
Image1 -> Canvas -> Pen -> Color = ColorDialog1 -> Color;
//Image1 的 Canvas(畫布) -> Pen(畫筆) -> Color(顏色) = 我 ColorDialog1元件裡頭選擇的顏色 。
這樣就完成開檔和選擇畫筆顏色的功能了。
接著是畫筆顏色出現的位置,
Image1MouseDown 這個是在Image稱為event的一個即時動作,當滑鼠點下時則發生事件,
在 Image1MouseDown 裡的程式碼如下:
Image1->Canvas->Pen->Color; //先取得顏色
if(Button==mbLeft) //如果點下左鍵
Image1->Canvas->MoveTo(X,Y); // 畫布上的座標就移到左鍵點的座標位置
if(Button==mbRight) //如果點下右鍵
Image1->Canvas->LineTo(X,Y); // 就從原本的座標開始做連線到右鍵點的座標
}
接下來就可以隨心所欲的畫囉!
訂閱:
文章 (Atom)