2014-02-09 51 views
-1

美好的一天每個人。我設法從我的指紋讀取器打印出像素值(來自字節的int)並將其顯示爲圖像。包含像素值的文本文件的大小應爲三倍。圖片重疊。我可以知道有什麼問題嗎?這是代碼。順便說一下,原始圖像應該是150K字節(480x320像素)。打印像素值,但圖像重疊。圖像是它應該是的三倍大小

根據規範,圖像是8位256灰度。

我懷疑它與存儲原始圖像的pBuffer的大小有關。請幫忙,我不知道如何解決這個問題。

我用

sizeof(pBuffer) 

它返回的四個值。有四個相同的圖像重疊。我只想要一個圖像。

void main() 
{ 
ofstream rawImage("Raw image.txt",ios::out); 

PBYTE pvData = (PBYTE)pBuffer;//pBuffer stores the raw image 
byte *bPoint = (byte*) pvData; 

byte TempArr[153600]; 
byte *bTo = TempArr; 
int Int32[153600]; 
memcpy(bTo, bPoint, 153600); 
for(int i=0;i<153600;i++) 
{ 

Int32[i] = (int)TempArr[i]; 
rawImage<<" "<<Int32[i]; 
} 
} 
+0

請注意,sizeof(pBuffer)只是給你指針的大小(4字節)!這可能不是你想要的。 –

+0

hi @πάνταῥεῖ,我怎樣才能得到只有指針的重要字節?順便說一下,圖像格式是8位256灰度。 – victorteoh90

+0

_'我怎麼才能得到重要的指針字節?'_對不起,我不明白你想要什麼。 –

回答

0

好的。解決了這個問題。這是設備數據表問題。該設備指定它是480x320,但在實際情況下它是320x480。這就是造成重疊圖像的原因。花了這麼長時間來解決這個問題。順便說一句,謝謝你試圖幫助

0

您發佈的代碼寫入文本文件,其中包含由空格分隔150K號。如果十進制形式的數字通常有2位數字,則說明文件的大小。

如果你想寫(含150K字節)的二進制文件,你應該

  • 不能稱之爲.txt
  • ios::out | ios::binary
  • 來電或整個塊write方法打開put方法爲單個字符而不是使用格式化輸出操作符<<
+0

_''ios :: binary''_這對於只有Windows的AFAIR很重要。如上所述,爲了寫二進制值,使用'std :: ostream :: write()'而不是'std :: ostream :: operator <<()'。 –

+0

嗨邁克爾,我試圖用fwrite和fopen_s以「wb +」參數使用fwrite編寫二進制文件。但我不知道如何讓這些二進制值來獲取圖像。如「.bmp」或「.jpg」格式。任何方法來做到這一點? – victorteoh90

+0

我只知道如何通過使用openCV獲取圖像通過我在文本文件中獲得的像素值 – victorteoh90