看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
zetab:RawBuf的index超過你宣告的範圍了 01/20 19:08
Zephyr750:不是276*235*3嗎? 01/20 23:43
Zephyr750:我知道了....276-235=41 01/20 23:45
Zephyr750:感謝.... 01/20 23:47
tropical72:比較有問題的應該是三個for loop塞資料到RawBuf 吧? 01/21 00:05
Zephyr750:真的耶!改著改著就沒注意到了!^^"真是壞習慣,謝謝 01/21 15:31