[問題] bmp讀檔 讀取bitmaparray出問題

看板C_and_CPP作者 (MC)時間14年前 (2011/04/13 21:28), 編輯推噓1(107)
留言8則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 問題(Question): 餵入的資料(Input): 24bpp 預期的正確結果(Expected Output): pB pG pR都能指到bmp的bitmaparray中屬於BGR顏色的地方 並且將padding的資料丟掉 錯誤結果(Wrong Output): error C2664: 'std::basic_istream<_Elem,_Traits>::read' : 無法將參數 1 從 'char' 轉換成 'char *' 1> with 1> [ 1> _Elem=char, 1> _Traits=std::char_traits<char> 1> ] 1> 從整數類資料型別轉換為指標型別必須有 reinterpret_cast、C-Style 轉換 或函式樣式轉換 程式碼(Code):(請善用置底文網頁, 記得排版) 部分程式碼 unsigned int pad=(biSize-3*(biWidth*biHeight))/biHeight; char* pB=new char [biWidth*biHeight]; char* pG=new char [biWidth*biHeight]; char* pR=new char [biWidth*biHeight]; for(unsigned int i=0;i<(biHeight*biWidth);i++){ if((i%biWidth)==0) file.read(NULL, pad); file.read(pB[i], 1); file.read(pG[i], 1); file.read(pR[i], 1); } 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.69.230 ※ 編輯: MiguelC 來自: 140.113.69.230 (04/13 21:41)

04/13 21:44, , 1F
read的參數一是要char*,可是你給它char,加上&看看
04/13 21:44, 1F
我以為char* pG=new char [biWidth*biHeight]; 就已經是char* 所以就沒有再轉換了QQ

04/13 21:44, , 2F
不過 把不要的byte塞到null去 真的不會出事嗎?
04/13 21:44, 2F
丟給NULL會出錯= = 但是在compile的時候沒有偵測到 ※ 編輯: MiguelC 來自: 140.113.69.230 (04/13 22:02)

04/13 22:10, , 3F
你用 file.read(&pB[i], 1); 試試, GR也一樣....
04/13 22:10, 3F

04/13 22:11, , 4F
pG是一個char*沒錯, 但pG[i]相當於只是一個char....
04/13 22:11, 4F

04/13 22:13, , 5F
另外, 不要的padding隨便開一個dummy char arr[]去讀,
04/13 22:13, 5F

04/13 22:14, , 6F
runtime error在compile時當然偵測不到Orz
04/13 22:14, 6F

04/13 22:14, , 7F
不想用dummy array去收pad, 就找一下移動file ptr的
04/13 22:14, 7F

04/13 22:15, , 8F
method吧, C++小弟不熟, 我只知道C搭FILE*是用fseek XD
04/13 22:15, 8F
感謝各位 最後改成這樣 unsigned int pad=(biSize-3*(biWidth*biHeight))/biHeight; char* pB=new char [biWidth*biHeight]; char* pG=new char [biWidth*biHeight]; char* pR=new char [biWidth*biHeight]; char padding; if(pad==0){ for(unsigned int i=0;i<(biHeight*biWidth);i++){ file.read(&pB[i], 1); file.read(&pG[i], 1); file.read(&pR[i], 1); } } else{ for(unsigned int i=0;i<(biHeight*biWidth);i++){ if(i==biWidth){ for(unsigned j=0;j<pad;j++) file.read((char*) &padding,1); } file.read(&pB[i], 1); file.read(&pG[i], 1); file.read(&pR[i], 1); } } 目前還沒發現錯誤... ※ 編輯: MiguelC 來自: 140.113.69.230 (04/13 22:51) ※ 編輯: MiguelC 來自: 140.113.69.230 (04/13 22:53)
文章代碼(AID): #1DfQK60S (C_and_CPP)