顯示具有 97360952 鄭景仁 標籤的文章。 顯示所有文章
顯示具有 97360952 鄭景仁 標籤的文章。 顯示所有文章

2010年1月16日 星期六

HW8

數位媒體概論的課程就此告一段落了

最後我還是沒有交第6跟7次作業
其實第六個作業我做一半
OFFSET讀得很奇怪
沒關係
有機會再研究


不是要拍老師馬屁
我很喜歡這樣的上課方式
好像國外的大學一樣
是用討論的方式在上課的
即使我不是那個在討論的人
我也能從其他同學提出的觀點
及老師的回答
了解一些東西
這樣子才能討論出書本上沒有的東西
前提是...我必須專心不恍神!

還有
對於上次老師說有關於BCB磚塊書
我個人的看法是

.
.
.

對"我"沒什麼用

有很多東西不是看了書才會的
就連最基礎的AnsiString用法
也是看了老師怎麼用,然後查一下網路我才了解的
還有fopen,fread,fseek
typedef的用法
都是上網找資料來的

不過磚塊裡有些東西確實可以用來參考
所以我覺得
磚塊用借的應該比較妥當
畢竟這麼厚重
個人看法啦!

---

喔對了
不是每個人對於寫程式都很在行

的確,我也認為老師教的東西不多
但是有多少人卡關?
我也是卡關的人阿
總不能因為一個人會了
老師就為了那個人一直在課堂上教新的東西

這堂課就像是食譜
課程上都教簡單的菜
想學更厲害的菜色
要靠自己在學習過程的經驗中
再變出更厲害的東西來!

---

也是個人看法拉
沒有要爭論什麼

最後
快樂的放寒假吧!

HW5

利用老師提供的程式碼
要讀取GIF調色盤
先從typedef下手,把要用到的變數都加到標頭檔
GIF的版本,長寬還有色塊等

第一次我寫這程式的時候
執行結果跟老師給的執行結果不一樣...





















整個顏色都不一樣阿!!!!!!
然後就EMAIL問老師
老師說:


"你可以把讀到的色彩顯示出來,


再用 PSPad editor 看是不是讀正確了"
 
 
...
我大概是聽不太懂老師的意思
已經顯示出顏色了阿!!!
 
後來上課再問老師
原來是要把讀到的顏色的"值"顯示出來
比如說(255,255,255)是白色那樣
我就在程式底下加了一小段東西
看一下最前面幾個顏色
再比對一下正確的數值
果然!!是讀取到錯誤的數字
 
我沒有注意到GIF的色塊是"R->G->B->"這樣一直下去的
不像BMP那時候的4BYTE
會讀錯是因為我偷懶
直接把BMP的color struct給GIF用...
好吧 只好再生一個GIF專屬的調色盤
 
然後就成功了!!!
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


後來我也想要在程式上直接秀出整張GIF圖檔
看到部落格裡有人也想這麼做
可是他有提到要用到什麼元件之類的
就暫時不研究了!
 

2009年12月8日 星期二

HW4

拖了兩個禮拜
我要交作業了!

有關於這次遲交的原因...

前兩次上課其實我就聽懂老師要我們寫什麼程式
老師也親自用PSPad示範如何找出Offset的位置
然後不要使用BCB內建的OpenPictureDialog
要自己一個Pixel接著一個Pixel的畫出要讀的圖檔

可惜我寫了好久...哀
就像組合語言一樣寫不出來

這次是利用老師提供的範例程式寫出來的
補上幾個需要用到的變數
也利用這次機會
我大概了解typedef的用法了










































上禮拜下課留下來
有跟老師提到
我需要範例程式才寫得出來這件事

好像我大二之後
越來越有這樣的趨向
像是資料結構就不能像以前程設那樣
可以從第一行寫到最後一行
不過老師給範例
至少我能夠應用範例

只是不知道這樣是好是壞...

2009年11月5日 星期四

HW3

要讀出BMP檔的資料阿...
上個禮拜老師開放了兩個版本的原始碼
我原本想研究typedef的

好吧
基於時間緊迫
我只好使用簡單版的

大概是使用到fread,fseek,fopen指令
上上禮拜在摸索的時候非常困擾
因為我找到的資料不是在BCB環境的
雖然一樣是C++
可是要融入選單指令讓我想了三節課還想不出來...

fopen(OpenPictureDialog1->FileName.c_str(), "r")

就這一行...



我們先看看檔案資料



1024*768
2.25MB(換算2359296Bytes)



讀進來了!!



檔案大小好像有些微差距...


來個小小的筆記好了
在一開始fread(cBuffer, 1, 2, imBMP);這段敘述中
1,2的意思就像是要求cBuffer開兩個各為1Byte的位子
讀取圖檔(從頭)的前兩個位子
也就是點陣圖頭的位元組 #0跟1

之後接著fread(bSize, 1, 4, imBMP);
會直接從點陣圖頭的位元組 #2接下去4個(#2,3,4,5)

可是我們要的圖檔寬度在#18
所以就使用fseek(imBMP,18,SEEK_SET);
將位置指向位元組 #18


我有些小疑問

照WIKI上面說的
DWORD值之後是保留部分,留做以後的擴展使用,對實際的解碼格式沒有影響。
我們在讀取檔案大小時,打的程式碼應該是指向保留部分(#6,7,8,9)
為什麼會變出檔案大小?

還有就是cBuffer的部分
既然我們只需要用到兩個陣列索引
為什麼要開三個索引,再把最後一個索引變成null...?

2009年10月22日 星期四

HW2 : 24bits to 8bits Picture


這禮拜的作業是

讀入一個 24-bit 彩色 .bmp 影像, 將其轉換成 8-bit 灰階影像儲存!

好吧

我記得好像有個公式,可以把彩色圖變成灰階

(紅+綠+藍) 除以 3

再把他們丟進迴圈裡,讓整張圖的Pixels都轉成灰階!


























還有用Switch把PixelFormat出現的值轉呈想要的顯示方式
程式架構沿用上禮拜的作業

桌布是FHM2009年8月的女神桌布

 
其實一開始我有去別的網站找資料

有人說

(紅+綠+藍) 除以 3   只是其中一種方法

還有一種是灰階值 = (R*76 + G*150 +B*29) >> 8


好吧
我對數字不太在行

但是我用第二種方法之後

圖變的比較清楚耶!!

---

倒是我有個不太懂的地方

這次作業的題目是

"將其轉換成 8-bit 灰階影像儲存"


























可是我再開一個Label去讀一次轉換灰階後的圖
PixelFormat還是24位元
按內容去看也是

難道是還有某種語法可以改變存檔的位元組嗎..?
不知道大家有沒有想過這問題...

2009年10月8日 星期四

HW1 : Painter

老實說我看完BCB大磚塊前面三章之後實在沒有什麼心得...
他把屬性列成一堆表格,重點是我不會用阿!!

好吧
我只好憑著記憶裡老師上課的程式碼寫程式了!!




我拉了Menu(選單),Label(標籤),Panel(...這要怎麼翻譯...)
還有PictureDialog,ColorDialog




還多了兩個按鈕
切換橡皮擦模式跟畫筆模式
這是參考磚塊上11-28章的寫法





我開始執行了
在執行幾次之後
我發現一個問題...





這錯誤訊息寫著:
Project Project1.exe raised exception class EInvalidGraphic with message
'Unknow picture file extension (.)'.
Process stopped.
Use step or Run to continue.

這是哪來的呢?

在"開啟圖片對話框"執行時
不要選擇任何圖片
直接按下取消鍵就會出現

可是我不知道為什麼會這樣...





然後Debug指著這一行:
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);


好怪
誰來幫我解答一下吧!!感謝!!










正常執行就像下面這兩張圖:


點選之後顯示Pixel的色彩值及座標



還有繪圖功能!!






至於繪圖功能
因為上次上課最後那段時間我聽得很模糊
所以就用磚塊上的程式碼(11-28)
我打得跟磚塊的差不多
只是做了點修改



在主要程式碼main.h裡private的地方,我用了幾個變數
int mode; //這是用來切換橡皮擦跟畫筆的開關
bool Mdown; //這是用來辨識滑鼠有沒有按下的開關
TPoint EraseP[4]; //橡皮擦大小:4 Pixels



還有一個地方有改
就是要自訂色彩


我已經在Menu上開了"色彩選擇對話框"了
接著就是要把指定的色彩傳達給畫筆
不然就只能畫出預設的黑色了


在Image1MouseMove裡面
先設定好滑鼠移動時要上色
再加一行
Image1->Canvas->Pen->Color=ColorDialog1->Color;
就可以指定你要的顏色了!!








我覺得阿
BCB看起來很簡單
拉出你要的按鈕
指定按鈕要做什麼事
可是想要指定他做事的時候
有時卻寫不出來
好像詞窮一樣...