[問題] bmp讀檔 讀取bitmaparray出問題
開發平台(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
04/13 21:44, 1F
我以為char* pG=new char [biWidth*biHeight]; 就已經是char*
所以就沒有再轉換了QQ
→
04/13 21:44, , 2F
04/13 21:44, 2F
丟給NULL會出錯= = 但是在compile的時候沒有偵測到
※ 編輯: MiguelC 來自: 140.113.69.230 (04/13 22:02)
→
04/13 22:10, , 3F
04/13 22:10, 3F
→
04/13 22:11, , 4F
04/13 22:11, 4F
推
04/13 22:13, , 5F
04/13 22:13, 5F
→
04/13 22:14, , 6F
04/13 22:14, 6F
→
04/13 22:14, , 7F
04/13 22:14, 7F
→
04/13 22:15, , 8F
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)