2014-02-09 21 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