我在播放文件时遇到了一些麻烦。这是我想要完成的。我试图通过取反蓝色值(每第三个值)来过滤PPM图像。我可以成功打开和写入文件,但遇到了一些问题。在我的while(myfile.good())循环中,我认为只有最后3个数字分配给变量r,g和b。我想要做的是每个第一个(分为三个)值分配给变量r,每个第二个值分配给g,每个第三个值分配给b。但是,我想获取255 - 当前的b值,并将其设置为应用于过滤器的新b值。我是否必须制作3个单独的文件(每个变量1个),然后将它们全部打开,将它们写入4个文件中,作为最终的副本?还是有办法将它们全部复制并分配给一个变量?任何帮助深表感谢。我对C++很陌生,所以请原谅我。谢谢您的帮助。我试图使用值如何编辑图像的值
#include <iostream>
#include <cmath>
#include <fstream>
#include <cstdlib>
using namespace std;
int main()
{
char filename[50];
ifstream myfile;
cin.getline(filename, 50);
myfile.open(filename);
if(!myfile.is_open())
{
cout << "File cannot load.";
}
char r [50];
char g [50];
char b [50];
myfile >> r >> g >> b;
while (myfile.good())
{
myfile >> r >> g >> b;
}
myfile.close();
ofstream myfile2;
myfile2.open(filename);
//this is just to test to see what gets written onto the file
//for (int a=0; a<20; a++)
//{
// ** Is this even allowed?? int r = 255 - r;
//myfile2 << r << " " << g << " " << b;
//}
myfile2.close();
return 0;
}
图像文件只包含像素值吗?没有标题信息(关于图像的大小等)? – 2015-02-08 09:27:34
假设它是一个P3 ppm,肯定有一个标题需要处理。如果你想读取值作为你应该做的数字,现在你正在阅读他们作为一个字符串和循环的每个迭代覆盖最后一个值。 – 2015-02-08 09:34:49
如果你的目标纯粹是为了处理图像,而不是学习C++,你可以使用ImageMagick(内置于大多数Linux发行版,可免费提供给Mac OSX和Windows),就像这样:convert input.ppm-channel B -negate output.ppm – 2015-02-08 10:50:34