看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) dev C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) no 問題(Question): 24位元的bmp 因為我用fstream 來寫開讀檔 跟大家用file = =a 不太一樣 所以標頭讀完後 = 口= 我就不知道也怎讀取rgb了 typedef struct bmpinfoheader { unsigned long bmpInfoSize;//Bitmap Info Header 的長度 unsigned long bmpWidth; //寬 unsigned long bmpHeight;//高(長) unsigned short bmpPlanes;//點陣圖的位元圖層數 ;     unsigned short bmpBitPixel;//每個像素的位元數 unsigned long bmpCompression;//壓縮方式 unsigned long bmpDataSize; unsigned long bmpXplan;//x方向 水平 unsigned long bmpYplan;//y 方向 垂直 unsigned long bmpColorUsed;//使用顏色數 unsigned long bmpColorImportant;//重要顏色數 } ; typedef struct RGB { unsigned char b; unsigned char g; unsigned char r; unsigned char reserved; }; int main () { open_file(); system("pause"); } int open_file() { bmpfileheader fhd; bmpinfoheader ihd; RGB color; fstream file ; //宣告fstream物件 file.read((char*)&ihd.bmpColorImportant,4); cout<<"imp color:"<<ihd.bmpColorImportant<<endl; //這是info head 重要顏色 接下來就不會寫讀取RGB了 //有想過 file.read((char*)&color.b,1) 來讀左下第一個b值或改3硬bgr 印出來cout<<"b:"<<color.b<<endl;卻沒東西Q0Q } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.34.109.77 ※ 編輯: pigcat1315 來自: 114.34.109.77 (08/05 15:01) ※ 編輯: pigcat1315 來自: 114.34.109.77 (08/05 15:02)
tropical72:#1DdAYTDy 08/05 15:02
pigcat1315:@_@樓上他那個也適用file寫 我用fstream 可以照樣嗎 08/05 15:13
suhorng:可以 08/05 15:20
pigcat1315:fgetc() 我的該用麼去換呢?file.get()? 08/05 15:41
angleevil:file.getc()<--他只是改成member function.用法沒變太多 08/05 15:47
pigcat1315:@_@樓上.getc() 好像沒這 member阿 08/05 15:53
xatier:http://ppt.cc/rVTn 用法眾多,看一下 08/05 15:58
pigcat1315:恩@_@我也是在看這個~努力換換看 08/05 16:05
angleevil:Sorry,因為我習慣用getline去讀取.所以沒注意到 08/05 16:21
pigcat1315:耳且他方法說真的我看不太懂Q0Q 08/05 16:41
tropical72:我以為他寫的算清楚,大多問題都有考慮到。給了解答看 08/05 16:58
tropical72:不懂,似乎..看要直接研究解答,還是復習整個bmp,看你. 08/05 16:59
pigcat1315:問個笨問題...j的那個for迴圈 08/05 17:10
pigcat1315:(int j=0 ; j<(4-(biWidth*3)%4); fgetc(fp),j++); 08/05 17:11
pigcat1315:XD 執行fgetc(fp) 的次數嗎 我沒這樣寫過 哈 08/05 17:12
angleevil:Reads a block of data of n characters and stores it 08/05 17:13
angleevil:這個是read的定義.沒辦法像c的fread這樣,去計算一次要讀 08/05 17:14
angleevil:取多少位元.我自行研究看看好了 08/05 17:15
pigcat1315:恩 感謝樓上~ 所以我在程式碼有try那個可惜 沒東西 08/05 17:17
angleevil:http://codepad.org/hSvzSaxp <--試試看. 08/05 17:45
angleevil:參考的網站是 http://0rz.tw/613N9 08/05 17:45
angleevil:基本上你還是要搭配位元運算.只是rgb和位元運算是我的缺 08/05 17:47
angleevil:點,愛莫能助Orz 08/05 17:47
tropical72:位元運算交給 compiler XD (大誤) 08/05 17:55
angleevil:tropical72 可以試試看rgb的梗嘛? 08/05 17:57
tropical72:我其實真的不知道原po是想做到怎樣,因我看他附的程式碼 08/05 19:09
tropical72:大多東西也都出來了,我不懂他卡在哪 XD 08/05 19:09
tropical72:要把 FILE 類 function 改成 fstream object 也不難吧. 08/05 19:10
firejox:rgb... 用uint32_t 吧~~ 08/05 19:14
angleevil:他應該是不知道怎麼湊出一個color吧! 08/05 19:33
angleevil:unsigned char A, R, G, B; 08/05 19:36
angleevil:int color = color = (A<<24) | (R<<16) | (G<<8) | B; 08/05 19:36
angleevil:int color = (A<<24) | (R<<16) | (G<<8) | B;<--這樣 08/05 19:37
angleevil:只是讓我困惑的是get,只讀取n個char,不知道跟fread會混 08/05 19:39
angleevil:淆嘛? 畢竟非我領域. 08/05 19:40
※ 編輯: pigcat1315 來自: 114.34.109.77 (08/05 23:43) ※ 編輯: pigcat1315 來自: 114.34.109.77 (08/05 23:45)
PkmX:std::cout << static_cast<int>(color.b); 08/05 23:46
PkmX:或是你要偷懶用 std::cout << +color.b; 也可以XD 08/05 23:47
※ 編輯: pigcat1315 來自: 114.34.109.77 (08/06 00:59)