【发布时间】:2015-12-11 22:42:51
【问题描述】:
我想制作一个程序,它将拍摄一张图像并将每个像素的蓝色分量替换为 0。
所以我写了这个。我在文件夹中有一个 bmp 图像和它的副本,作为输入文件,我输入了原始文件的名称,作为输出名称,我编写了副本。但是当我在程序运行后尝试打开第二个时,它无法正常打开。有人可以帮忙吗?
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
int main()
{
ifstream ifs;
ofstream ofs;
char input[80];
char output[80];
cout<<"Input file name"<<endl;
cin>>input;
ifs.open(input, ios::binary);
if(!ifs)
{
cout<<"Error in opening file"<<endl;
system("pause");
return 0;
}
cout<<"Output file name"<<endl;
cin>>output;
ofs.open(output, ios::binary);
ifs.seekg(2);
int file_size;
ifs.read((char*)&file_size, sizeof(int));
ofs<<"Bitmap size: "<<file_size<<"\r\n";
ifs.seekg(10);
int beg;
ifs.read((char*)&beg, sizeof(int));
ofs<<"Beggining of image: "<<beg<<"\r\n";
ifs.seekg(18);
int columns;
ifs.read((char*)&columns, sizeof(int));
ofs<<"Column number: "<<columns<<"\r\n";
ifs.seekg(22);
int rows;
ifs.read((char*)&rows, sizeof(int));
ofs<<"Row number: "<<rows<<"\r\n";
int image_size=0;
columns+=(3*columns)%4;
image_size=3*columns*rows;
ofs<<"Size of image"<<image_size<<"\r\n";
ifs.seekg(beg);
unsigned char R,G,B;
for(int i=beg; i<image_size+beg; i+=3)
{
ofs.seekp(i);
ofs<<char(0);
}
system("pause");
return 0;
}
【问题讨论】:
-
您是否尝试过如果您的程序只是复制文件会发生什么 - 将字节从输入写入输出而不进行修改?
-
几乎在代码末尾的 for 呢?
-
Piotr - 不,我没有,但这是个好主意。我会
-
我对 BMP 格式了解不多,但是……它真的包含诸如“图像大小”或“行号:”之类的字符串吗?
-
@PiotrAleksanderChmielowski 不,当然不是。