[問題] MFC讀raw檔

看板C_and_CPP作者 (紅蓮西風750)時間14年前 (2012/01/20 16:41), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC6 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 餵入的資料(Input): 276x235的raw檔 http://pic.eslite.com/Upload/MediaEvent/2011/5337/129693407553275000.jpg
用photoshop將連結中的影像轉成.raw檔 程式碼(Code):(請善用置底文網頁, 記得排版) 用VC++6建立一個Single Document 在 CRAWReaderView 的class中宣告 CStdioFile RawFile; unsigned char RawBuf[276][235][3]; 並且在下面的位置加入程式碼 void CRAWReaderView::OnDraw(CDC* pDC) { CRAWReaderDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CString FilePath; FilePath.Format("276x3x235.raw"); if (!RawFile.Open(FilePath, CFile::modeRead | CFile::typeBinary)) AfxMessageBox("檔案開啟失敗"); for (int pY = 0; pY<235 ; ++pY) for (int pX = 0; pX<276 ; ++pX) for (int k = 0; k<3 ; ++k) RawBuf[pY][pX][k] = 0; if (!RawFile.Read(RawBuf, 276*235*3)) AfxMessageBox("讀檔失敗"); RawFile.Close(); for (pY = 0; pY < 235 ; ++pY) for (pX = 0; pX < 276 + pY * 41 ; ++pX) pDC->SetPixelV((pX - pY * 41), pY, RGB(RawBuf[pY][pX][0], RawBuf[pY][pX][1], RawBuf[pY][pX][2])); } 補充說明(Supplement): 輸出第一行(pY = 0)pX是正確的值(一個值為RGB(R, G, B)) 輸出第二行(pY = 1)pX會重覆上一行,最後41個值 依此類推! 多出這41個值,亂詭異的,所以上來問問看是什麼原因。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.98.237

01/20 19:08, , 1F
RawBuf的index超過你宣告的範圍了
01/20 19:08, 1F

01/20 23:43, , 2F
不是276*235*3嗎?
01/20 23:43, 2F

01/20 23:45, , 3F
我知道了....276-235=41
01/20 23:45, 3F

01/20 23:47, , 4F
感謝....
01/20 23:47, 4F

01/21 00:05, , 5F
比較有問題的應該是三個for loop塞資料到RawBuf 吧?
01/21 00:05, 5F

01/21 15:31, , 6F
真的耶!改著改著就沒注意到了!^^"真是壞習慣,謝謝
01/21 15:31, 6F
文章代碼(AID): #1F6IYVHW (C_and_CPP)