학교 프로젝트의 경우 특정 기능에서 BMP 형식 인 이진 파일의 픽셀을 읽습니다. pixels는 객체의 픽셀 유형의 2D 배열입니다. 여기서 목표는 픽셀의 X 행과 Y 열의 이진 파일을 읽는 것입니다. 그러나 각 픽셀 행 다음에 패딩이 있으며 calculatePadding() 함수를 사용하여 계산할 수 있습니다. 반환 값 형식은 unsigned입니다.ignore()를 사용하지 않고 이진 파일 (C++)을 읽을 때 N 바이트를 무시합니까?
우리가해야 할 일은 파일을 2 진수로 한 행씩 읽고 픽셀을 다른 변수에 저장하므로 각 행 다음에 패딩을 건너 뜁니다. 이것은 지금까지 내가 한 것입니다 :
for (int i = image.height - 1; i >= 0; i--) {
for (unsigned j = 0;j < image.width; j++) {
file.read((char*)&image.pixels[i][j], sizeof(Pixel));
}
fichier.seekg(sizeof(calculatePadding(image)) + tellp() , ios::beg);
}
내 문제는 마지막 행 (마지막 닫기 괄호 앞)입니다. 커서의 현재 위치와 패딩에 필요한 크기를 추가하여 커서를 앞으로 설정해야한다는 것을 알고 있습니다. 그러나, 어떻게 서명되지 않은 및 streampos 추가 할 수 있습니까? 나는 내가해야하는 전환을 이해하지 못한다. ignore()를 사용할 수 없습니다.
도움 주셔서 감사합니다!
또한 사이드 노트에서 어떻게 '0'을 바이너리 파일에 쓸 수 있습니까? 다음 함수에서 이미지를 가져 와서 이진 파일에 쓰고 패딩이있는 곳에서 '0'을 바이너리에 넣어야합니다.
이것은 작동합니까?
int zero = 0;
file.write((char*)&zero, sizeof(calculatePadding(image)));
패딩은 항상 4 바이트 미만입니다. 난 그냥 4 바이트 배열을 만들고 그것에 패딩을 읽어. 간단하고 쓰기도 같은 기술을 사용할 수 있습니다. –
'크기'는 무엇입니까? –