C++ 打印像素值,但图像重叠。图像的大小是其应有大小的三倍

C++ 打印像素值,但图像重叠。图像的大小是其应有大小的三倍,c++,image,buffer,overlap,C++,Image,Buffer,Overlap,大家好。我设法从指纹读取器中打印出像素值(字节的int值),并将其显示为图像。包含像素值的文本文件的大小是其应有大小的三倍。而且画面是重叠的。我能知道怎么了吗???这是密码。顺便说一下,原始图像应该是150K字节(480x320像素) 根据规范,图像为8比特256灰度 我怀疑这与存储原始图像的pBuffer的大小有关。请帮忙,我不知道怎么解决这个问题 我曾经 sizeof(pBuffer) 它返回一个值4。有四个相同的图像重叠。我只想要一张照片 void main() { ofstream

大家好。我设法从指纹读取器中打印出像素值(字节的int值),并将其显示为图像。包含像素值的文本文件的大小是其应有大小的三倍。而且画面是重叠的。我能知道怎么了吗???这是密码。顺便说一下,原始图像应该是150K字节(480x320像素)

根据规范,图像为8比特256灰度

我怀疑这与存储原始图像的pBuffer的大小有关。请帮忙,我不知道怎么解决这个问题

我曾经

 sizeof(pBuffer)
它返回一个值4。有四个相同的图像重叠。我只想要一张照片

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];
}
}
void main()
{
流rawImage(“Raw image.txt”,ios::out);
PBYTE pData=(PBYTE)pBuffer;//pBuffer存储原始图像
字节*b点=(字节*)数据;
字节TempArr[153600];
字节*bTo=TempArr;
Int32[153600];
memcpy(bTo,bPoint,153600);

对于(int i=0;i您发布的代码编写了一个文本文件,其中包含150K个数字,用空格分隔。如果十进制形式的数字通常有2位数字,则说明了文件的大小

如果你想写一个二进制文件(包含150K字节),你应该

  • 不要叫它
    .txt
  • ios::out | ios::binary打开它

  • 对整个块调用
    write
    方法,或对单个字符调用
    put
    方法,而不是使用格式化输出运算符
    确定。解决了问题。这是设备数据表问题。设备指定为480x320,但实际情况下为320x480。这就是导致图像重叠的原因。要好了,解决这个问题就到此为止。顺便说一句,谢谢大家的帮助。注意,
    sizeof(pBuffer)
    只给出了指针的大小(4字节)!!这可能不是你想要的。hi@πάνταῥεῖ, 我如何才能只获取重要指针的字节数?顺便说一句,图像格式是8位256灰度。“我如何才能只获取重要指针的字节数?”对不起,我不明白您想要什么。@πάνταῥεῖ, 如何获取该值,以便能够打印出恰好1个图像,而不是重叠的4个图像?Thank=d请后退一步,并说明写入8位值需要多少ASCII字符。还要考虑显示文本文件内容的程序是否存在错误。“
    ios::binary
    ”,这对windows仅适用于AFAIR。要编写二进制值使用
    std::ostream::write()
    而不是
    std::ostream::operatorhi michael,我尝试使用带有“wb+”参数的fwrite和fopen_s来用二进制编写它。但是我不知道如何使这些二进制值获得图像。例如“.bmp”或“.jpg”格式化。有什么方法可以做到这一点吗?我只知道如何通过使用openCV从文本文件中获取的像素值来获取图像。如果您能够在openCV中读取文本文件,并且该文件大约为500KB,则写入工作正常。在这种情况下,您的问题不是将数据写入文件,而是在数据采集步骤。