c++ - C++ Windows 编译程序与 Linux 不同的行为
问题描述
我为 Linux 系统编写了一些代码来读取/写入位图文件。
我将此代码传输到 Windows,并尝试使用 Visual Studio 2019 对其进行编译。
我通过打开一个位图文件并保存它的副本来测试我的程序。我发现只有位图图像的前几行被写入文件,文件的其余部分是空白的。(黑色图像颜色。)
我对此感到非常困惑,所以写了一个更简单的程序,它只是转储文件中字节的整数值。
我在一个 32 x 32 位图图像文件上运行此文件,该文件是从 GIMP 保存的,每像素格式为 24 位(R8 G8 B8),并且在兼容性选项中设置了“不写入色彩空间信息”。
我发现下面的代码将数据打印到 about i = 500
,然后为文件的其余部分打印零。
该文件如下所示:
它显然不包含大的零区域。
编辑:我编辑了以下代码以添加输出文件。代码下方的屏幕截图显示了生成的输出。
#include <iostream>
#include <fstream>
#include <vector>
int main()
{
std::ifstream ifile("city32.bmp");
ifile.seekg(0, std::ios::end);
std::size_t fsize = ifile.tellg();
std::cout << "fsize=" << fsize << std::endl;
ifile.seekg(0, std::ios::beg);
std::vector<unsigned char> buf(fsize, 0);
std::cout << "vector size: " << buf.size() << std::endl;
ifile.read((char*)&buf[0], fsize);
for(int i = 0; i < buf.size(); ++ i)
{
std::cout << i << "." << (int)buf.at(i) << " ";
}
std::cout << std::endl;
std::ofstream ofile("city32_out.bmp");
ofile.write((char*)&buf[0], fsize);
ofile.close();
ifile.close();
return 0;
}
原图链接,如有兴趣:https ://allhdwallpapers.com/wp-content/uploads/2015/06/Shanghai-1.jpg
解决方案
确保以二进制模式打开文件。
推荐阅读
- sql-server - 验证非键列依赖和传递依赖
- pdo - 带参数的 PDO 查询
- python - Pyomo:如何在潮流模型中声明节点网络?
- python - 使用带有 Python 和 PyCharm 的 Kubeflow Pipelines SDK 连接到 AI Platform Pipelines
- json - 数据工厂使用查询创建json
- javascript - SyntaxError:无效的递增/递减操作数
- javascript - api 块被调用 2 次,导致渲染组件两次,尽管条件得到了正确检查
- android - 我如何在 Room 数据库查询中获得今天
- java - log4j DailyRollingFileAppender 滚动两次
- symfony5 - EasyAdmin - 删除操作,同时删除一个物理文件