저는 ppm 이미지를 읽고 객체로 저장 한 다음 다시 쓸 프로그램을 작성하려고합니다. 이상적으로, 픽셀을 int 타입 객체로 저장하고 싶습니다만, 문자로만 비슷한 이미지를 얻을 수 있습니다. 불행히도 char 객체를 사용하더라도 이미지가 회색으로 표시됩니다. 왜 저장소 유형을 변경하면 큰 변화가 발생하는지, 셰이프가 유지되면 이미지 색이 손실되는 이유를 모르겠습니다.C++ 읽기/쓰기 PPM 이미지 파일이 회색으로 표시됩니다.
다른 ppm 프로그램 질문을 여기에서 살펴 보려고했지만 답변의 머리말이나 꼬리를 만들 수 없습니다 (또는 관련성이있는 경우). 나는이 언어에 익숙하지 않으며 무슨 일이 일어날 지 모릅니다.
누구나 내가 잘못하고있는 것을 설명 할 수 있고 char 대신 int 형식으로 데이터를 저장하는 데 사용할 수있는 전략이 있다면 대단히 감사 할 것입니다.
다음은 ppm 클래스의 파일 읽기 및 파일 쓰기 코드입니다. 주 함수는 ppm 객체를 초기화하고 readfile()을 호출 한 다음 writefile()을 호출합니다. 어딘가에는 이미지를 보존하지 못합니다.
void PPM::readFile(std::string filename)
{
std::ifstream file;
std::string stuff;
char junk;
file.open(filename, std::ios::binary);
file >> stuff >> width >> height >> maxCol;
file >> std::noskipws >> junk;
int i = 0;
char r, g, b;
std::cout << width*height;
while (i < width*height)
{
file.read(&r, 1);
file.read(&g, 1);
file.read(&b, 1);
red.push_back(b);
grn.push_back(b);
blu.push_back(b);
i++;
std::cout << i << std::endl;
}
}
void PPM::writeFile(std::string filename) const
{
std::ofstream file;
file.open(filename, std::ios::binary);
file << "P6 " << width << " " << height << " " << maxCol << std::endl;
int i = 0;
std::cout << width << " " << height;
while (i < width*height)
{
file.write(&red[i], sizeof(red[i]));
file.write(&grn[i], sizeof(grn[i]));
file.write(&blu[i], sizeof(blu[i]));
std::cout << "iteration " << i << std::endl;
i++;
}
}
다시 한번 감사 어떤 도움을 당신이이 버그
'빨강', '녹색'및 '블루'란 무엇입니까? –