我在播放文件時遇到了一些麻煩。這是我想要完成的。我試圖通過取反藍色值(每第三個值)來過濾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