誰可以給我 --->
將一張點陣圖一層一層(rgb)讀入距陣的程式!!!
救救我~~~~謝謝..
2006-05-02 18:18:59 · 4 個解答 · 發問者 朵朵 1 in 電腦與網際網路 ➔ 程式設計
首先要了解點陣圖(BMP)的檔案格式 : 開頭前54byte為檔頭部份,說明圖片的格式,長寬大小像,素位元...就光已讀圖檔而言..必須知道圖的長與寬。
圖象寬的資訊在擋頭 4 - 7 BYTE的位置(佔 4BYTE)
圖象長的資訊在擋頭 8 - 11BYTE的位置(佔 4BYTE)
以像素位元24bit的格式的圖檔,它RGB三個Channel排列方式為 B G R B G R...
程式碼:
void main()
{
BYTE pHead[54]; // 存檔頭
BYTE *pImgBuffer; //影像Buffer
unsinged int w, h; // 長,寬
int nImgSize; //圖像空間所需大小
FILE *pfImg;
pImg = fopen("file name", 'rb' ); //開圖檔
fread(pHead, sizeof(BYTE)*54, pImg) // 讀檔頭
fseek(pfImg, 0, SEEK_SET); //將檔案指標移到開頭部份
fread(&w, sizeof(BYTE)*4, 1, pImg) //讀寬的資訊至變數 w
fread(&h, sizeof(BYTE)*4, 1, pImg) //讀寬的資訊至變數 h
//有了寬與長的資訊就可以配置影像空間了
nImgSize = w*h*3 ; // *3代表Pixel為元位24bit(RGB各3BYTE)
pImgBuffer = new BYTE[ w*h*3 ]; // 配置圖象空間
fseek(pfImg, 54 , SEEK_SET); //將檔案指標指向圖像資料開頭(前54BYTE為黨頭)
fread(pImgBuffer, sizeof(BYTE)w*h*3, pfImg); //讀取圖像資料至Buffer
//經過上面的程式,pImgBuffer就已經含有整張圖像的資料內容了
//使用方式: 如果只保留R的資訊...
for(int i = 0; i < h ; i++)
{
for(int j = 0; j < w; j++)
{
pImgBuffer[ (i*w + j )*3 ] = 0;
pImgBuffer[ (i*w + j )*3 + 1 ] = 0;
pImgBuffer[ (i*w + j )*3 + 2 ] = pImgBuffer[ (i*w + j )*3 + 2 ]; //這行可不做,指示說明資料不變...
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
大致上就這樣子 了....程式沒跑過...有錯的話應該也不多...剩下的靠自己囉...
如有問題再說...或MAIL..在知識要回答問題蠻累的...= =
2006-05-03 11:54:36 · answer #1 · answered by niusy 2 · 0⤊ 0⤋
按"搜尋"->選擇"所有檔案和資料夾"->在"部分或完整檔案名稱"內打「nmake」搜尋。但要在c槽底下或"Microsoft Visual Studio"這個資料夾底下搜尋。
但我執行完nmake之後,卻只有libjpeg的word檔耶?!
請問:在程式碼要include什麼?
2006-07-04 13:13:48 · answer #2 · answered by 西瓜 1 · 0⤊ 0⤋
我找不到nmake執行??怎麼辦!!
2006-05-07 06:59:23 · answer #3 · answered by 朵朵 1 · 0⤊ 0⤋
你可能需要這個程式庫:libjpeg
http://freshmeat.net/redir/libjpeg/5665/url_tgz/jpegsrc.v6b.tar.gz
這版有支援vc++ 6.0。
用winrar解開後,將目錄中的makefile.vc改名為makefile,再將jconfig.vc改名為jconfig.h,然後執行nmake,就會得到libjpeg.lib。
這程式庫是用來讀取和寫入jpg/jpeg檔案的。
2006-05-06 14:15:26 · answer #4 · answered by Bobo 3 · 0⤊ 0⤋