作者Zephyr750 (紅蓮西風750)
看板C_and_CPP
標題[問題] MFC讀raw檔
時間Fri Jan 20 16:41:00 2012
開發平台(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