Plurk

   

2009年12月7日 星期一

HW4


這次我打算開新的檔案...

請讀取一張BMP影像,並將其影像內容顯示於C++ Builder 的影像元件之中.

* 要先在檔案的Unit1.h內打上"  #include "






開始跑程式,就會發現一些錯誤,因為他找不到所要用的變數,所以就要一一的去除錯,就會發現是少了一個int 還是少了一個OpenDialog 還是少了一個Label  







我那時就一個一個跑,就打出好要顯示的Label,看到我眼睛都要花了,不過每當有跑出一個就會想要再繼續,就會發現都要先給定int,其實只是Label名稱還有所要表是的東西不同,而運算方式都是一樣的

噢~我忘了!要記得先在Form1所做的File內多加一的開啟這張圖的路徑( MyOpenBMPFile1)喔!
不然就不能開圖嚕!




當所有的除錯都修改好後,該加的都加好後,開始跑嚕!

就發現為什麼開了圖卻顯示不出圖來(出錯),但把 iBitCount到 lblImportantColor->Caption 用" /* " 使這一大段先不看,這張圖就可以跑出來,就很好奇為什麼?明明就沒有錯誤啊!為什麼會這樣子啊?(這時就已經是下課時間了,老師也準備走嚕!就剛好也請教老師這個問題)

啊!原來喔~是程式中的 " delete imOriginal " 在作怪喔!

也不是說他在作怪啦!老師之所以會打上" delete imOriginal "是因為老師在ScrollBox元件下有擺了一張空白圖,當要開啟新的圖時," delet imOriginal "就會在這時候發會作用把原先的空白圖砍掉貼上開啟的圖! 就是這麼一回事啊!!

但因為我沒有在ScrollBox元件下襬空白圖所以我不需要用到" delete imOriginal ",我就用" // "(表示不看這行),這樣我就又可以回復原來的程式來跑(開啟圖)嚕!



                                  


這.....發生了跟老師遇到了一樣的問題! (哈......)





原來是我在一開始的fopen後面的mode忘了改成" rb " (老師還為了這個問題困擾了兩天).





而這張圖是老師在作業中另一個要求:

將圖 " 改成可以讀取影像寬度可以不是4的倍數的彩色影像.



終於.................


  


完成了....!




這次的作業其實應該早就要交了,但還是拖到現在才交,因為不知道要如何下手,所以就拖了兩個禮拜,直到上禮拜上課老師給我們範例程式,才知道所要表達的是什麼,也好讓我們從中學習,老師也說我們還是得自己多練習才會寫,因為以後出社會後不會有人給我們這麼好的範例程式.

2009年11月4日 星期三

HW3


*本週所要練習的題目是如何從BMP檔案中讀出相關的圖片資料


一開始要記得先到Unit1.h 裡打上 " #include " 喔!
再回到Unit1.cpp打上所要呈現出來的程式碼.
還要打上開啟檔案的路徑不然他會不知道要去哪兒找!

imBMP = fopen(OpenPictureDialog1->FileName.c_str(), "r");
* 其中 " c_str() " 是指轉換型別 AnsiString -> char 


接著就要開始設定要顯示出來的圖片資料





fread(cBuffer,1,2,imBMP);

位元組 #0-1 保存點陣圖文件的標識符,這兩個位元組的典型數據是BM
這時數據位置在2,


-------------------------------------------------------------------------------------------------------------------






fread(bSize,1,4,imBMP);
位元組 #2-5 使用一個dword保存點陣圖文件大小

這時數據位置在6
---------------------------------------------------------------------------------------------------------------------






int IFileSize = bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;
檔案大小
------------------------------------------------------------------------------------------------------------------------





fseek(imBMP,18,SEEK_SET);
這時數據位置指向18
位元組 #18-21 保存點陣圖寬度(以像素個數表示)

int ImageWidth = bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;
圖片的寬
-------------------------------------------------------------------------------------------------------------------------





fseek(imBMP,22,SEEK_SET);
這時數據位置指向22 (其實也可以不用打啦~!)
位元組 #22-25 保存點陣圖高度(以像素個數表示)

int iImageHeigh= bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;
圖片的高
---------------------------------------------------------------------------------------------------------------------------



在上上禮拜老師就有要我們自己先嘗試著以寫程式的方式去開啟資料夾裡的東西(fopen)
我還上網看了網路上的解釋, 但還是看不懂, 感覺很攏統, 不知道要如何寫, 而這禮拜老師就寫給我們看, 也解說給我們聽, 加上又問同學, 在筆記上寫上註解, 這樣也方面自己了解, 下次再寫的話也會比較清楚.希望可以越來越上手!

2009年10月21日 星期三

HW2

延續上一次的作業---讀入一個 24-bit 彩色 , bmp 影像 , 將其轉換成 8-bit 灰階影像儲存.

首先~我接著上次老師後來所教的繼續製作下去!!

捲軸盒的建立!

這一個步驟較簡單, 只需要選擇 Additional 分類項底下的 ScrollBox 元件, 就可以在Form中框出自己想要的捲軸盒大小喔!

*要注意的是: 要將圖片 減下 再 貼上 在捲軸框框上面喔!
(我一開始做的時候就沒有照著老師說的所以就跑不出來)



放入捲軸後呈現出來的樣貌

可以上下左右滑動唷! ( 以捲將圖拉到可看到右下角 )




到目前為止 都還算是簡單 但從下一個步驟開始就讓我覺得有些複雜


要在 Form 上顯示出所 Show 出來的圖片為幾位元

這是照著老師所教的 用 Switch 去判斷




我的圖片是屬於24位元的圖 (哈哈~其實彩色的圖幾乎都是24位元點陣圖)




再來就是重點啦~要將 24 位元圖轉換成 8 位元灰階圖

利用 for 迴圈 且 讀取每個點的顏色除以三原色所顯示出的圖片

*(R+G+B)/3




這樣就可以將圖片轉換成灰階圖了!

要記得做一的 Button 按鈕喔! 要把程式碼打在 Button Click 裡面, 這樣就可以將按鈕按下使要轉換的灰階圖顯示出來唷! 超神奇!

我還Show了一個 Message 讓你知道有轉換成功喔!






但是 不知道為什麼 已經轉換成灰階圖 卻還是顯是為24位元的圖
請老師為我解答~

再來就是最後步驟啦~製作完一個檔案, 當然也要把他儲存起來! 不然就沒有檔案可以找尋也不能回憶嚕@ @ 就好像白做工一樣!




這個步驟完成後就可以方便的將轉換後的灰階圖儲存起來了!





我將轉換過後的灰階圖另外儲存新檔 檔名為 " PRADA時尚派對_灰階圖 "

當時在課堂上練習時, 超級有挫折感, 一直很混淆, 但最後還是有做出來, 雖然作很慢 , 但挫折感就沒那麼大了, 真的要花時間下功夫, 不然我的挫折感會越來越大, 這樣就麻煩嚕!



HW1

先製作一個MainMenu , OpoePictureDailog.
















要使圖片可以Show出來就要寫上一行程式 , 要使用Image , 但當時我忘記要去老師的部落格找還問了一下同學 , 才想起來可以到老師的部落格去找 ,才使我的照片可以大方的show出來. 看到圖片跳出來時有小小的成就感耶!








我使用的是多色彩且是今年最具有時尚風格的一張圖!











----------------------------------------------------------------






點選Lable(標籤) 製作滑鼠游標X ,Y軸. 還有 三原色色彩值.
















接著我要使滑鼠移到圖片上時能跑出X軸和Y軸的座標值.色彩值.





先是在框出的範圍框框點一下在到左邊的Object Inspector / Events 下點選是要當滑鼠一動到圖片究顯示該XY軸值和色彩值 , 還是要點一下再顯示出來都可以 , 在點兩下就可以編輯程式了唷!





我選擇的是移動到圖片就可以顯示(OnMouseMove).


這時我才知道 lbl 就像 int一樣 是一個變數型態 可以去設X 和 Y.


但我卻忘了 AnsiString 這個東西 , 怎麼打都覺得怪怪的 ,問了我的好同學才知道這個要記住!








打出了X 軸 還有 Y軸的程式碼 , 相對的也要打上三原色的程式碼 紅 綠 藍 .





但要記得! 老師有提醒到說 Label的名稱要在Properties下的Name裡面改.


我在上課練習時就有犯這個錯誤 (在Caption裡改名稱是錯的喔!) !!













----------------------------------------------------------------








點選 Panel 製作使滑鼠經過圖片時可顯示滑鼠所指的顏色.
















我選擇把Panel中的 " Panel1 "的字刪除,這樣比較好看(當顏色顯現出來時比較不壞礙眼).


也把原先恢恢醜醜的顏色改掉 ,改成藍色.





接著也是照上面的方法進入寫上程式碼 . 放入三原色的程式碼 .


我將滑鼠移到了桃紅色的地方, 所以Panel中會顯現出桃紅色.


不管我的滑鼠移到哪個區塊的顏色 , Panel中都會乖乖的顯示出我要看到的顏色喔!
















----------------------------------------------------------------








製作畫筆 , 使得畫筆可在圖片上畫出線條或圖形.



*但要先在 Unit1.h 標頭檔裡的 private 打上需要的變數.













這個部份我就覺得比較困難 , 參考了課本第11-33頁到11-35頁.


才發現還要利用到標頭檔裡的東西去打上需要的變數 .我真的是要看花了眼呢!!












------------------------------------------------------------------



後來發現如果沒有指定畫筆的顏色 , 就只會畫出 所預設的"黑色".


不管選哪個顏色畫出來的顏色都是黑色 , 我超納悶 , 真的是不知道是為什麼耶!

點選綠色 , 畫出來的卻是黑色?!















紅筆圈起來的就是點選 綠色 所畫出來的 黑色.












-------------------------------------------------------------------



我還是請教了我的好同學....





所以要再加上 指定畫筆的程式碼 DrawColor=ColorDialog1->Color










才能畫出所點選的顏色.




*圖所點選畫筆顏色 畫出的是 藍色(上) 和 綠色(下).





哇!! 終於啊! 這樣就可以讓我想畫什麼顏色就畫什麼顏色在圖片上啦!!
我就隨便點兩個顏色先畫畫看! 藍色(上) 和 綠色(下).


真的顯現出我所點選的顏色耶!













----------------------------------------------------------------






就開始重新跑一遍我所製做的東西...



但在用畫筆時 , 當滑鼠點在圖片上畫線時 ,


不知道為什麼會有奇怪的影像 ,就是圖片會一閃一閃的...why?





我畫了紅色 , 綠色 , 黃色 的線.












*圖所顯示的就是此製作的總表現



可以 Show出圖 / MouseMove在圖上的 X(363) Y(15) ,


三原色色色彩值Red(1) Green(1) Blue(1) . Panel顯示出黑色 .



點選 Edit 裡的 ColorPanel 選擇畫筆顏色 , 使得可以在圖片上畫上線條或圖形(使用了 紅 , 綠 , 黃 ).





--------------------------------------------------------------------------------------------



呼~終於完成了! 第一堂課看老師再做按鈕元件時就有嚇一跳說原來可以自己做這些東西唷!

好酷喔! 可以自己設計想要表現的東西!就感到很有趣!但這次的作業做下來還是有感覺到是

有困難的 ,還是有些細部的地方要去注意! 上次上課就有被老師糾正了錯誤的地方!我有記起來喔!

還有詢問我的好同學也和他一起討論.

之後還會有更多的東西(BCB)可以玩吧!真的要好好的運用這本厚厚的課本!還要認真看老師製作的步驟 不然輪到自己製作時就一頭霧水嚕!