數位媒體概論的課程就此告一段落了
最後我還是沒有交第6跟7次作業
其實第六個作業我做一半
OFFSET讀得很奇怪
沒關係
有機會再研究
不是要拍老師馬屁
我很喜歡這樣的上課方式
好像國外的大學一樣
是用討論的方式在上課的
即使我不是那個在討論的人
我也能從其他同學提出的觀點
及老師的回答
了解一些東西
這樣子才能討論出書本上沒有的東西
前提是...我必須專心不恍神!
還有
對於上次老師說有關於BCB磚塊書
我個人的看法是
.
.
.
對"我"沒什麼用
有很多東西不是看了書才會的
就連最基礎的AnsiString用法
也是看了老師怎麼用,然後查一下網路我才了解的
還有fopen,fread,fseek
typedef的用法
都是上網找資料來的
不過磚塊裡有些東西確實可以用來參考
所以我覺得
磚塊用借的應該比較妥當
畢竟這麼厚重
個人看法啦!
---
喔對了
不是每個人對於寫程式都很在行
的確,我也認為老師教的東西不多
但是有多少人卡關?
我也是卡關的人阿
總不能因為一個人會了
老師就為了那個人一直在課堂上教新的東西
這堂課就像是食譜
課程上都教簡單的菜
想學更厲害的菜色
要靠自己在學習過程的經驗中
再變出更厲害的東西來!
---
也是個人看法拉
沒有要爭論什麼
最後
快樂的放寒假吧!
2010年1月16日 星期六
HW5
利用老師提供的程式碼
要讀取GIF調色盤
先從typedef下手,把要用到的變數都加到標頭檔
GIF的版本,長寬還有色塊等
第一次我寫這程式的時候
執行結果跟老師給的執行結果不一樣...
整個顏色都不一樣阿!!!!!!
然後就EMAIL問老師
老師說:
"你可以把讀到的色彩顯示出來,
再用 PSPad editor 看是不是讀正確了"
...
我大概是聽不太懂老師的意思
已經顯示出顏色了阿!!!
後來上課再問老師
原來是要把讀到的顏色的"值"顯示出來
比如說(255,255,255)是白色那樣
我就在程式底下加了一小段東西
看一下最前面幾個顏色
再比對一下正確的數值
果然!!是讀取到錯誤的數字
我沒有注意到GIF的色塊是"R->G->B->"這樣一直下去的
不像BMP那時候的4BYTE
會讀錯是因為我偷懶
直接把BMP的color struct給GIF用...
好吧 只好再生一個GIF專屬的調色盤
然後就成功了!!!
後來我也想要在程式上直接秀出整張GIF圖檔
看到部落格裡有人也想這麼做
可是他有提到要用到什麼元件之類的
就暫時不研究了!
要讀取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的用法了
|
|
|
﹀
上禮拜下課留下來
有跟老師提到
我需要範例程式才寫得出來這件事
好像我大二之後
越來越有這樣的趨向
像是資料結構就不能像以前程設那樣
可以從第一行寫到最後一行
不過老師給範例
至少我能夠應用範例
只是不知道這樣是好是壞...
我要交作業了!
有關於這次遲交的原因...
前兩次上課其實我就聽懂老師要我們寫什麼程式
老師也親自用PSPad示範如何找出Offset的位置
然後不要使用BCB內建的OpenPictureDialog
要自己一個Pixel接著一個Pixel的畫出要讀的圖檔
可惜我寫了好久...哀
就像組合語言一樣寫不出來
這次是利用老師提供的範例程式寫出來的
補上幾個需要用到的變數
也利用這次機會
我大概了解typedef的用法了
|
|
|
﹀
上禮拜下課留下來
有跟老師提到
我需要範例程式才寫得出來這件事
好像我大二之後
越來越有這樣的趨向
像是資料結構就不能像以前程設那樣
可以從第一行寫到最後一行
不過老師給範例
至少我能夠應用範例
只是不知道這樣是好是壞...
2009年11月5日 星期四
HW3
要讀出BMP檔的資料阿...
上個禮拜老師開放了兩個版本的原始碼
我原本想研究typedef的
好吧
基於時間緊迫
我只好使用簡單版的
大概是使用到fread,fseek,fopen指令
上上禮拜在摸索的時候非常困擾
因為我找到的資料不是在BCB環境的
雖然一樣是C++
可是要融入選單指令讓我想了三節課還想不出來...
fopen(OpenPictureDialog1->FileName.c_str(), "r")
就這一行...
唉
好
我們先看看檔案資料
來個小小的筆記好了
在一開始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...?
上個禮拜老師開放了兩個版本的原始碼
我原本想研究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出現的值轉呈想要的顯示方式
程式架構沿用上禮拜的作業
其實一開始我有去別的網站找資料
有人說
(紅+綠+藍) 除以 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看起來很簡單
拉出你要的按鈕
指定按鈕要做什麼事
可是想要指定他做事的時候
有時卻寫不出來
好像詞窮一樣...
他把屬性列成一堆表格,重點是我不會用阿!!
好吧
我只好憑著記憶裡老師上課的程式碼寫程式了!!

我拉了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看起來很簡單
拉出你要的按鈕
指定按鈕要做什麼事
可是想要指定他做事的時候
有時卻寫不出來
好像詞窮一樣...
訂閱:
文章 (Atom)

.jpg)







