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

(上面只有部分程式碼,怕太多占版面)

沒有留言:

張貼留言