我试图在bmp图像中替换颜色。我尝试使无符号字符变量直接等于一些值...像
unsigned char oldr=255, oldg=255, oldb=0
这工作得很好。将整数转换为位图颜色RGB值C++
但是现在我想把这种颜色作为用户的输入。 当我使用cin流时,它需要255个三个字符,所以直接输入到unsigned char不起作用。 我试图把输入到整数,然后typecast char ... 但是,这是行不通的。我试图打印字符,并且字符有时对于ASCII表格来说是很好的。有时只显示空格。但不要在位图中工作。
unsigned int inewr, inewg, inewb, ioldr, ioldg, ioldb // Creating Integers;
cout << "Enter R - G - B of Color to Replace: ";
cin >> ioldr >> ioldg >> ioldb; // Taking Integers of Old Color From User
cout << "Enter R - G - B of New: ";
cin >> inewr >> inewg >> inewb; // Taking Integers of New Color From User
// Type casting to char
unsigned char newr=inewr, newg=inewg, newb=inewb, oldr=ioldr, oldg=ioldr, oldb=ioldb;
cout << newr << " " << newg << " " << newb << endl; // Printing out characters
cout << oldr << " " << oldg << " " << oldb << endl;`
,然后检查颜色和文件写入...
for (int j=0; j<height; j++) {
for (int i=0; i<width*3; i+=3) {
b = mainarray[i][j];
g = mainarray[i+1][j];
r = mainarray[i+2][j];
if (r==oldr && g==oldg && b==oldb) {
fout.write((char*) &newb, 1);
fout.write((char*) &newg, 1);
fout.write((char*) &newr, 1);
} else {
fout.write((char*) &b, 1);
fout.write((char*) &g, 1);
fout.write((char*) &r, 1);
}
}
}
注:数组和所有其他的事情都是在我没有告诉你的代码确定.. 。 只是在类型铸造中存在问题。正如我所说的把oldr = 255的作品很好...... 另外我没有使用任何库。它适用于24位位图图像
cout << int(newr)<<”“<< int(newg)<<”“<