顯示具有 97360163 楊宗昇 標籤的文章。 顯示所有文章
顯示具有 97360163 楊宗昇 標籤的文章。 顯示所有文章

2010年1月15日 星期五

hw07

第七個作業,是要將其聲音的音波顯示出來,
還要可以調整音量的大小,
可能是期末考的壓力,
讓我對最後一堂課有點心不在焉,
雖然說成功的將音樂播放,也將其音樂檔的相關內容都讀出來了,
可是要達成老師說要可調整音量大小、show其音波,
對我這個初學者而言,有點困難,
我不想上網查資料,因為那是別人的東西,
我倒希望藉由之後選修課程,將現在的不足彌補,
選擇其興趣,在去研讀更深造的東西。

老師要我們買的那本書,有簡單的應用,
而且看這本書時並不會有壓力,因為就像在閱讀一樣,很好玩,
了解其元件的應用,自己在實際操作,其實進步很快的,
老師也強調,要自己仔細的將程式碼好好想一遍,
這個方法真的很有用,
不但加強自己觀念更可以加強撰寫程式的能力,
我想把程式學好,而且漸漸的有在進步了,
除了老師平常細心教導之外,
朋友也願意將他們撰寫程式的邏輯與我分享。

hw05

關於第五個作業,
老師要我們去讀一個gif的檔案,
標頭等其他詳細資料,
都可以藉由讀取記憶體位置而得知,
不過關於這次要將調色盤show出來,
有參考老師的程式碼,
跟同學討論,
結果同學也是不大解其意,
如果將其值讀出來,一定要經過比較
才能達到老師的要求,
因為要由明到暗排順序顯示,
可是在實際撰寫程式碼,我卻不大了解,
如何將他以畫格的方式做出來,如何將其比較後的畫格顯示出來,
可能還需要去請教老師了。

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堂+班會+下午,如果可以的話,
老師下次開課可以要求學校不要排那麼緊湊的時間。
在課程的安排上,我個人是覺得作業部分不會過分要求,
在安排上剛剛好,兩個禮拜一次作業對我們來說彈性已經很大了,
只不過,老師也可以嘗試用考試的方式(兩個禮拜一次作業,下兩個禮拜變考試(可考上上星期作業相關延伸))
這樣學習效果或許會比現在更好,畢竟現在學生沒考試的話很少主動去念書研讀的。

2009年11月26日 星期四

hw04

















這次的作業,是要自己將圖片影像讀出來
讀完每個點的RGB再將其顯示在畫布上就大功告成了
其實這個作業跟之前的作業有相似之處,
如果稍微想一下就可以完成了
因為是要將每個點的RGB值讀出來
所以先用個for迴圈,再將其讀出的長寬設給變數
變成其FOR迴圈的條件,

for(j=iFileHeight;j>0;j--)
for(i=0;iCanvas->Pixels[i][j]=(TColor)RGB(bSize[2],bSize[1],bSize[0]);
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才對。
聽同學說 老師有講,喔不= = 我不是故意沒聽到的!!
可是最後作出來的時候,有種爽快感呢!!
















成功!!

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); // 就從原本的座標開始做連線到右鍵點的座標
}
接下來就可以隨心所欲的畫囉!