2009年12月30日 星期三

HW 4


這次的作業就是不使用開檔的方式 是去讀他的標頭檔資料把圖掃出來。這是第三次作業的延續,主要是使用這三個指令fopen、fseek、fread來開起圖片。就比使用LoadFromFile這個方式稍微有深度一點。在家研究的時候,我先去看老師網頁的範例程式,了解一下如何運用,比起直接用LoadFromFile讀取,使用fopen掃圖的時間就比較久一點點。這次有使用到PsPad,在資料結構的時候我們已經有用過了,所以一點也不陌生。
bPtrOriginalImage[j*3+2] = ctColor[0].bRed
bPtrOriginalImage[j*3+1] = ctColor[0].bGreen
bPtrOriginalImage[j*3] = ctColor[0].bBlue
這三行就是把R、G、B三色讀進去影像元件裡面,一開始我還不了解,後來去問了蔡宗甫這三行的意思我才了解,不一樣的開檔方式有不一樣的效果出現,可見BCB我還很不夠深入了解。



2009年12月23日 星期三

HW3





目前程式對於開啟與儲存影像功能只對BMP檔案有效,JMP影像可以讀取,但儲
存還不算成功,因為儲存的時候有點小問題,好像"未定義成功"的樣子。
程式對於讀取影像資料無誤,只是感覺好像少了甚麼。
在RGB色彩上也有所回應,目前可以把滑鼠游標的座標讀出來並可偵測圖像上的
RGB值並顯示,加上了游標上那點的顏色顯色。

程式的介面較為簡單,除了TOOLBAR的兩個製作外,還有了快捷建。
目前正著手分頁的製作,對於IMAGE指向其他分頁,並做影像處理的部分有點卡
關。因為還不太清楚程式的指向到底指去哪了,編譯會過,但在黑白、灰階、反
相的分頁上,只有黑白目前有顯示,灰階跟反相的IMAGE不知道跑去哪了,跑不
出來。

目前還修編中,希望這個程式能夠更完善,感覺加了這些東西進去,都筆小畫家
好用多了。

因為電腦從XP變成WIN7,還有很多東西不習慣....
且之前的檔案不小心刪掉了,沒備份。
因此,旋轉、複製區塊、貼上、裁減、畫筆、放大與縮小的功能都沒了啦~~~
其實還蠻想哭的...
只記得備份寫真集,卻沒備份作業。像智障一樣.....連其他作業我都忘了備份Orz

2009年12月22日 星期二

HW3












第三次的作業是要讀出BMP檔案的資料(長寬 解析度等資料)顯示在LABEL上

在這次的作業當中第一次接觸了FOPEN FSEAK這些東西

實在是不太熟悉於是去資料結構的MOODLE討論區中開了一個討論版看有沒有同學會

結果得到的答案都十分的抽象 於是就嘗試了自己查資料 不過依然是有點撲朔迷離

還好接下來的幾堂課當中老師都還是有加強這幾個東西的使用方式 只能說是平台不一樣

使用起來也因此不太順手 看了老師的範例檔之後總算可以做出這個結果 但是製作過程當中忘記將公尺轉換成英吋 造成資料顯示的地方會出現錯誤的數值 但在知道要做轉換之後 總算是讀出正常的資料

HW3


這星期老師要我們把BMP檔案寫出來,要注意的地方就是解析度要將公尺轉成英寸所以要在除上39.37才會變成dpi值(dot per inch)。fread、fopen和fseek 要使用這3個指令,一開始我還真是都抓不到頭緒,畢竟要承認沒有學好,問同學也是會很用心的教我,要求圖的內容是要
大小int IFileSize = bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;

寬int ImageWidth = bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;

高int iImageHeigh= bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;不過這次好像有幾個東西沒有弄出來的樣子??每次的作業都是累加上去的,弄一弄感覺這個程式更加完善了,功能也越來越多,也表示東西越交越多。真的有點難度了...

2009年12月21日 星期一

hw4


啊!!我hw3的作業忘了寫標籤了= =

再來是我的第4個作業,這次的作業老師說要用pspad去檢查,可能所顯示的數值跟pspad的不同。不過檢查後有差一點點。這表示程式裡的計算有一點點問題嗎?還是差一點點沒關係不要差太多就好?這一次的作業大概沒問題了顯示好像都ok。



2009HW3



<-這是開第一張圖的時候。













<-開第二章圖的時候底下卻有第一張圖的痕跡。
怎麼辦??
雖然這次的作業跟前幾次大部分都相同,但是我還是會卡卡的改很久。有去看了老師po的程式碼,但是我還是有一些問題。所以當然是問同學囉~~但是還是有一點不懂的地方。

HW 3

上次有上傳一次 HW 3也有成功發佈,

不過在修改時不知什麼原因.......,

結果不見了@@?

嗯...很詭異的事件,所以我在重新PO一次。


以下為執行結果:
















這次的作業是用 fopen,fread與fseek來做開BMP的圖檔

、讀取,且將其圖片的資訊SHOW在畫面中,相較於

之前作業所用的開檔程式,這的確是較為複雜些,

而這次作業需要注意的地方是:

在讀取解析度時,須將值除以39.37,

因解析度值須把公尺轉為"英吋",

多這步驟才為才為dpi值(dot per inch),



這次作業的fopen,fread,fseek,



需要多多留意寫法及用途,

因為之後的幾次實作中應該會應用上,

簡言之,第3次作業.......結束!!! ^^

2009年12月20日 星期日

HW4


這是這次作業的程式設計,與前幾次不一樣的是我把某些功能編到主要工具列的工具選單裡,這樣可以讓程是看起來再簡單點,另外我把主要工具列的按鈕加上了快捷鍵,只要在按鈕名稱旁邊加上(&快捷鍵)就可以了。












這次的作業是要自己開圖檔,把BMP圖檔的資訊讀出來,再一個一個畫到影像元件裡,想了很久還是沒有頭緒,還是要借助範例程式的力量。但是程式打完執行時卻一直出錯,這讓我頭痛了大半天,範例程式裡:
delete imOriginal;
imOriginal = new TImage(this);
imOriginal->Parent = sbOriginalImage;
imOriginal->Left = 4;
imOriginal->Top = 4;
imOriginal->AutoSize = false;
imOriginal->Width = iImageWidth;
imOriginal->Height = iImageHeight;

imOriginal->Picture->Bitmap->PixelFormat = pf24bit;
imOriginal->Picture->Bitmap->Height = iImageHeight;
imOriginal->Picture->Bitmap->Width = iImageWidth;
這段 我把
delete imOriginal;
imOriginal = new TImage(this);
imOriginal->Parent = sbOriginalImage;
imOriginal->Left = 4;
imOriginal->Top = 4;
imOriginal->AutoSize = false;


刪去就可以執行了,真是神奇,不知道是因為我哪段程是沒寫好導致的,不過他能成功把圖畫出來真是讓我非常感動。

















這是執行的成果,這一刻真是讓人欣喜諾狂,在這裡遇到了以前的問題,就是只要再載入圖片前滑鼠移到灰階轉換的那個影像元件裡,灰階轉換就會出問題,下像下面的圖片一樣。

















最後是把那個影像元件的事件全部去除,才可以保證他不出問題。這樣就解決了長期衣來的問題,但是就沒辦法把灰階影像元件滑鼠指到的那格資訊給讀出來了,還滿可惜的,不過之後有辦法會再來把它完成。
















隨著程式功能越來越多,介面的設計也越來越重要了,要善用各種工具來完成,BCB也越來越好玩了!

hw04


這次作業還要用pspad去檢查,不然很容易搞錯,用了很久,終於把作業給用出來,知道怎麼用,可是實際用起來,真的有差

hw03


這次的作業就是要將記憶體儲存的資料取出來,而相對記憶體所儲存的資料又截然不同,記憶體位置可以從維基百科可以查,然後利用fseek將裏頭的資料取出來,這很像打開,只是開的東西不同

hw02


這個作業用了很久,幸好同學用出來了,不然我還真的不會,這證明了我還要繼續加油才有可能學得好

2009年12月17日 星期四

HW5

Update : 新HW5作業新增於分隔線後

完成HW4後,改善了之前提到的要把欲讀取的BMP檔以更人性化的方式開啟
(註:之前是將入徑寫死在程式碼中 "C:\\Bitmap.bmp")
另外閒著沒事便把程式介面來個大翻修
以Pagecontrol統整所有功能,使程式操作起來較系統化
也加入了狀態列將滑鼠座標與即時色彩值顯示在狀態列上

然後,是這禮拜的作業 HW5 - 讀取GIF的調色盤資訊並顯示出來

查了一下GIF檔頭資訊的格式,一邊用PSPad開啟老師提供的金龜子(!?).gif比對
原來GIF檔頭資訊還真精簡
GIF標籤、制定版本、長寬與不知名的3bytes之後就是一目了然的調色盤
看到這裡,作業已經在腦袋裡完成了九成,
讀取3bytes的RGB而已沒什麼困難,只要將他顯示出來就好

顯示出來.... 怎麼顯示出來?!
翻了BCB提供的眾元件,似乎沒有調色盤模組之類的玩意兒...
難不成要我拉出256個Panel來上色?! 這方法蠢到自己都想撞豆腐自殺
VB曾經寫過元件陣列,雖然說操作起來蠻方便的
但是一來,BCB的元件陣列我不會用
  二來,還是要拉出256個元件阿!!!

轉念一想,如果.. 用畫的勒?
一格一格一格畫出來.. 反正是程式畫,又不是我畫,感覺起來似乎可行
打開BCB,Set一個New space專屬於GIF 調色盤
開始順著感覺Key出填格子命令的程式碼
過程輕鬆愉快10幾行搞定,關鍵性的一Run...

唷~ 一次到位,絢麗奪目的256格調色盤
比對老師的調色盤後..

宣告收工,HW5破關

(翻新後程式介面)


HW5作業展示


這是從課程討論區抓下來的金龜子.gif檔案,開啟他


極致藝術,馬賽克完成



寫在最後面:本來還在想說要怎麼顯示GIF圖檔以及他的調色盤
要擠在同一頁?可是分開來感覺又降低關聯性
要另外開一個Pagecontrol?
拜託..這一加,控制開關得重新調整簡直是自討苦吃

最後要LoadFormFile時..咦 碰了?味瞎咪?
有求必應的辜狗大神告訴我.. 喔.. BCB要讀GIF要自訂套件喔...
那就這樣吧~


===================================


題目新增一項動作 - 調色盤依色彩亮度排序

聽到題目馬上直接想到使用陣列處理,然後再基礎的Sort比大小
雖然原先沒有用陣列去處理調色盤的顏色
不過將256個顏色assign給陣列不會太困難

剩的問題是亮度怎麼分析?
課堂上也有解答,乘以莫名其妙的數字轉灰階便是間接求出亮度

剩下就是將一團空想實現在BCB上
實際操作也沒問題,宣告幾個公用變數以供Sort元件存取Open元件所處理的色值
套上以前寫到爛的Sort方法

恩~ 成果看似跟老師的一樣
原本每格色彩之間沒有間隙,想說這樣還可以跟老師的範例做個區隔
不過看了看覺得都擠在一起好像不怎麼好看...

於是乎順手賞了它們一些個田埂,一個蘿蔔一個坑
果然是美觀了些~

除了從暗排到亮,另外生了一個從亮排到暗...
不過這沒啥好說嘴的就是,不過就大於變小於罷了....


開啟金龜子.gif Successful !!



依照亮度排序 - 暗 to 亮


依照亮度排序 - 亮 to 暗




2009年12月15日 星期二

WH4

這次作業目的是要把圖一個一個圖進去檔案元件裡面,一開始我也是運用老師的範例檔來做,後來自己又改了一點,才可以完成執行,一開始自己寫的時候很多東西都會漏寫到,忘記寫INCLUDE就讓我除錯除了好久好久,最後詢問同學才知道,還有我一開始寫好還讀取不到檔案,然後自己想了好久才發現少了一行fread(BMPHeader, 14, 1, imBMP);




這次我第一次找到的圖,結果變這樣最後看了老師得講解才知道 每一橫列所需的byte數都對齊為

4 的倍數的狀況 所以才會發生這個問題







最後最後才完成了這艱難的功課,花了好長時間想老師給範例該怎麼使用,

bPtrOriginalImage[j*3] = ctColor[0].bBlue;
bPtrOriginalImage[j*3+1] = ctColor[0].bGreen;
bPtrOriginalImage[j*3+2] = ctColor[0].bRed;
一開始也不知道這三行在做些什麼,最後找了資料才知道,這是用來把她的RGB資料寫進去我的影像元件裡面,這資料好多有點看不懂,但是應該是這樣,這次作業雖然感覺跟上次很像,但是讀檔的方式完全不一樣,是一個特別的作業。

2009年12月10日 星期四

HW4













這次作業和第三次作業有些雷同,只是這次是要重新再畫出一張圖,這次跟上次不同的地方是將fopen的模式改成rb 而不是單純的r
STEP1
FILE* BMP_file = fopen(OpenPictureDialog1->FileName.c_str(), "rb");

STEP2
在取得決定 要畫的畫布大小
int start,BMP_Width,BMP_Height;

Image3->Height=Image1->Picture->Height;

Image3->Width=Image1->Picture->Width;

STEP3
將圖檔以二進制讀入抓取裡面得每個點的RGB值,將值取出來在畫到另外的Image去。
for(int x=BMP_Height;x>=0;x--){
for(int y=0;y fread(bitSize, 1, 3, BMP_file);
Image3->Canvas->Pixels[y][x]=RGB(bitSize[2],bitSize[1],bitSize[0]);
Application->ProcessMessages();
}

我的圖大小好像怪怪的...在學校可以用

Image3->Height=Image1->Picture->Height;

Image3->Width=Image1->Picture->Width;

不過回到家裡就不知道為什麼沒辦法用 真奇怪 囧

HW4

這次作業與上次的大同小異,不過這次是要讀取BMP檔裡面的RAW值,並將它顯示出來。搭配之前所學的freed,fseek讀取RGB不是問題。

1

Program Name:SourceBMP
Version:         0.02 alpha
                    0.03 alpha(98.12.3更新)
編譯完成的程式檔可以從這裡下載

功能:
不透過LoadFromFile,直接讀取BMP圖檔的RAW值
修正:
(98.12.3) 修正fseek遇到控制字元問題,並將圖正確顯示

這個作業總共出現了兩種版本的程式寫法
第一種為「點讀取法」透過兩層for迴圈讀取每個點的RGB值

一開始實作時,一直出現個很奇怪的情況,顏色無法正確的顯示,後來查WIKI的資料才發現原來RAW的儲存方式不是RGB而是倒著回來的BGR,更改一下RGB輸出的方式就顯示正確了

用RGB的順序讀取
2
用BGR的順序讀取
3

翻文件同時也發現了RAW檔儲存的順序是圖片的左下角到右上角

在製作讀取程式時跟老師討論到調色盤(Palette)的事情
3png

之前一直不知道調色盤的作用,與老師討論過後才了解到調色盤是用來儲存整個BMP的顏色資訊索引值,可以應用在BMP檔的壓縮上面
BMP檔壓縮方法是假設有個圖有紅紅藍藍綠綠
傳統RGB方是個別存在54byte以後的空間,但這樣檔案會很大
透過索引值方式將紅藍綠存在54byte以後當成參考值
在原本存顏色資訊的地方指定索引值的位置再透過RLE壓縮法就能做到無損壓縮BMP

至於RLE是什麼?查WIKI的資料它叫「變動長度編碼法」直接解是太抽象我用例子解釋一下
假設有筆資料為AAAAABBBBCCCC總共需要13個位元儲存
RLE的方式為將資料改成另一種表示法
AAAAABBBBCCCC → 5A4B4C 只需要 6個位元就可以儲存了
再透過演算反解壓縮資料就能還原為原始資料

至於詳細的實作方式還在研究中

第二種為上次上課老師提到用ScanLine一次讀取一列的方式,比第一種方式快很多
原本的點搜尋法讀取大圖檔時非常的慢

98.12.03補充:
透過將fopen讀取指修正避免fseek遇到無法讀取的RGB值(控制字元)
這是原本的寫法fopen(“text.bmp”,“r”);
新的寫法為fopen(“text.bmp”,“rb”);
加了這個b讓fopen以binary的方式讀取檔案
用原本的r模式是以文字的方式讀取檔案
但是檔案中可能會遇到一些控制字元(例如空白等)
會造成讀取錯誤
所以之前第一次實做時才發生了fseek不會往下跳的情況
透過b模式強制fopen用二進位的方式讀取(直接讀資料不轉換字元)就可以順利讀檔正確了

2009年12月9日 星期三

HW4

這次的作業其實作用跟上次作業相同

主要也是讀圖Show在畫面上

並且在畫面中讀出Show出圖片資訊


但這之中不同的是:

須使用fopen fread fseek來抓取圖片的檔頭

且多使用了Pspad找尋位置

這軟體記得最後一次用還是在資料結構中使用

沒想到在這也會用到他...


而做這次作業也發生的錯誤也比之前多

所以這次還有在課堂上講解一番後

再繼續給我們實作





結果出來囉!!

HW 4



因為期中考週太忙,然後考完後又偷懶才會拖到現在才交作業。

好,切入正題。這次的HW 4其實就是上次HW 3的延伸。HW 4老師給我們的要求是使用C語言的指令 - fopen、fseek、fread來開啟BMP圖檔,原本的LoadFromFile的方式就顯的比較簡單。道先要用用PSPad找出圖檔原始碼的位置,再用fopen、fseek、fread來讀取BMP檔並掃出圖即可。相較於LoadFromFile直接將BMP檔讀出來的方式,這次是用fopen將一張圖檔從左下方開始由下往上慢慢掃出來的方式。關於PSPad,已經不是第一次接處到了,資料結構學到的東西也會需要用到PSPad ; 當然,那很難,我學的爛透了 ! 除此之外,也可以用PSPad來解開某間電腦教室對FaceBook的封鎖 ! 這次的程式也是依照範例才寫的出來,隨著程式碼愈來愈長,要學習吸收的東西也愈來愈多,在同時學習多種程式語言的情況下,只能盡力而為。還是希望有一天可以不需要仰賴老師給的範例程式。

2009年12月8日 星期二

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的倍數的彩色影像.



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


  


完成了....!




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

HW4

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

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

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

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

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










































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

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

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

2009年12月4日 星期五

HW4






這次的作業承襲了上次的作業,加上了一小段程式碼即可完成,作業3時利用到了fopen、fseek、fread來讀出圖片的資料,而這次則是用到了for迴圈加上fseek和fread將圖片的色彩值讀出來秀出圖片。而要用fseek來找出色彩值位置,可以利用到PSPad軟體來查看,查出後再用fread讀出,三個陣列存放RGB值,兩個for迴圈跑圖的長和寬,將讀出來的值秀在image上即可。上網看了一下維基,才比較了解到PSPad上數值的資訊,PSPad還算蠻不錯用的軟體!

2009年12月3日 星期四

HW4

YA~~太好了!


總算把之前的問題給解決了


把位元深度給弄出來囉~~


最近好累


連續三天的資訊展弄到快吐血囉


除了講解講解還是講解~才講第一天喉嚨快啞掉了!


好了~~


回歸正題


上禮拜位元深度一直為零


始終想不透到底為什麼?


總算老師教我使用一套軟體


叫做Pspad的一套軟體


看網路上寫它的功能寫的超多


但~~~裡面最重要的能夠看到BMP的圖片所有資訊


還蠻好用的
從上一次了老師的講解知道

會為0也許是圖片內部資訊的關係

今天去把內部資訊抓出來看

並且再去修改了程式碼~

總算弄出來了~~~~

明天資訊展最後一天~~加油!!

HW4

這次作業用fopen讀檔,可是一開始怎麼試都是錯誤的
一直跑出怪怪的東西,而且這次的作業,程式碼整個
超多,看到眼睛都花了,其實我對PSPAD並不是很熟
只是在上資料結構的時候用過,老實說我還是不懂他
到底在做什麼,而且我想拜託老師示範這次的作業,
給我們看看,因為我想應該還是很多人都弄不太出來
,包括我也是其中之一,這次作業真的弄很久,可是
也是毫無頭緒,希望老師能夠給我們正確的方向。

HW4

PSPAD雖然在上資料結構的時候有用過,但是實際上用起來還是很不熟悉,改用不同的方法去做,雖然感覺很新鮮....但是做起來卻是一點也不順利,有點麻煩,主要遇到的問題是,有些圖片顯示出來的水平還有垂直解析度是0....我一直去試不同的圖片,發現有些圖片就可以正常顯示解析度,可是有些始終是掛0。改用fopen去開檔,比原本教的複雜許多,程式的執行速度感覺也沒有快的很驚人,我還是喜歡用原本那個程式碼不複雜又能輕鬆達到我要的LoadFromFile。

HW4

隨著作業的進度,BCB的程式碼越來越多,能用的東西也越來越多了,再新增程式碼時,一個不小心都會找不到錯誤到底在哪出現,因此每次新增都要很小心,BCB就跟C++一樣,要常使用才能夠很熟,知道什麼時候要用什麼東西,不常摸的話,很多時候都不知道要用什麼東西。

這是第4次的BCB作業,要把原本的fopen開圖方式改成用掃的方式掃在畫布上,他是從圖片的左下角開始掃,一行一行由左至右,掃出那個點的RGB值在掃上去,在感覺上這種方法開圖好像比起之前的fopen還慢,不過也因此了解更多種讀圖的方法了。

上課上到現在,感覺東西越來越多,也越來越複雜了,一堂課沒到感覺整個進度就會落後許多,每節課都在講新的東西,同時也複習舊的東西,到現在感覺有點跟不太上,不花時間下去讀好像修完這堂課還是一無所知的感覺,BCB算是我接觸的第2種程式,比起C++而言陌生許多,因此多碰他才能夠熟悉的運用。

HW3



這次的作業老師要我們把BMP的圖檔的資料讀出來,我們要使用fread、fopen和fseek 。使用fread將圖片檔案的資料讀取出來fopen則可以讓所選取的圖片打開fseek可以指定檔案的目標位置,讀出來的圖片資料有下面幾項
例:圖片的格式、高與寬、大小和解析度

檔案大小的開啟:int IFileSize = bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;

圖片高和寬:
int iImageHeigh= bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;

int ImageWidth = bSize[0] + bSize[1] * 256 + bSize[2] * 256*256 + bSize[3] * 256*256*256;

這次作業有個要注意的地方就是解析度要將公尺轉成英寸所以要在除上39.37才會變成dpi值(dot per inch)。fread、fopen和fseek 這3個指令好像是專門用來抓圖片檔案的資料,開啟、指定、讀出,在最近的作業和老師的上課內容中是最為重要的也是讀取圖片檔案資料要用的指令,這次的作業跟前幾次的有點不同,前幾次的作業比較像是要我們寫出類似小畫家功能的程式,這次的作業確比較像是一般電腦開啟資料夾旁邊會顯示出檔案內容大小的東西感覺跟"圖像"的關西比較少比較像是跟"檔案"有關,不過這次的指令我們也知道了一些跟圖片比較沒有關西卻跟檔案有關的知識。

2009年12月2日 星期三

HW4

不知道大家有沒有發覺到,還是我個人問題?大家這週做出來的程式,再執行時一定發現,
水平解析度、垂直解析度為什麼有時候會出現零?明明程式碼是對的???為什麼會出現零呢?
我有跟很多人對照過,程式碼都是沒問題的,大家都是差不多的= ="但為什麼會這樣,
我也不知道!只知道一個很怪的小原因,如果從網頁直接下載圖,直接儲存成bmp黨(如下圖↓)
從網路存下來的bmp黨,檔案執行時,水平解析度與垂直解析度出現錯誤,會變成零。
(如下圖↓)

但如果從網頁儲存為jpg黨,再轉成bmp黨(如下圖↓)

當jpg檔轉成bmp檔時,再打開檔案執行一次,就可以正確跑出水平解析度與垂直解析度。
顯示的數字不再是零,出現的是72 dpi。(如下圖↓)

然後我們對照一下,執行的檔案是否有錯誤,這時把圖檔顯示內容打開對照。
垂直解析度與水平解析度、寬度、高度都正確show出來!!!


那為什麼會這樣?我真的不知道,只是發現,換個方式去打開,就可以正確跑出。
但不是每次都是錯誤的,有時存下來的bmp黨,打開執行,有時也是正確的,
也不竟為是完全錯誤的。


寫完此項作業的心得,感覺很有成就,因為我發現到這個小問題,還很多人說,奇怪???
同一個範例,為什麼你跑的出解析度我跑不出來呢???
終於被我姊開小小的謎題,大概是bug...