비트 맵 파일을 수정하려고하는데이 작업을 수행하려면 크기가 필요합니다.비트 맵 파일의 크기가 맞습니까? 일치하지 않는 속성
내가 제대로 헤더를 읽어, 나는 (C 사용, BTW)이 구조체를 사용 확신 : 나는 버그 결과를 얻고 하루의 끝에서
#pragma pack(1)
struct bmp_fileheader
{
unsigned char fileMarker1; /* 'B' */
unsigned char fileMarker2; /* 'M' */
unsigned int bfSize; /* File's size */
unsigned short unused1;
unsigned short unused2;
unsigned int imageDataOffset; /* Offset to the start of image data */
};
struct bmp_infoheader
{
unsigned int biSize; /* Size of the info header - 40 bytes */
signed int width; /* Width of the image */
signed int height; /* Height of the image */
unsigned short planes;
unsigned short bitPix;
unsigned int biCompression;
unsigned int biSizeImage; /* Size of the image data */
int biXPelsPerMeter;
int biYPelsPerMeter;
unsigned int biClrUsed;
unsigned int biClrImportant;
};
#pragma pack()
을, 그리고 그것이 때문에 생각 bfSize가 파일의 특성과 일치하지 않습니다. (오른쪽의 printf bfSize에서 속성을 다릅니다 클릭합니다. 나는이 링크 (https://en.wikipedia.org/wiki/BMP_file_format#Example_1)에서 이해하는 것과
을의 bfSize 전체 크기를 포함해야합니다, 패딩을 포함. bfSize이 속성과 다른 경우
그것은 괜찮습니까?
난 그냥 생각이있어, 픽셀 '배열?
을 시작할 위치를 내가 읽어 것처럼 파일에서 계속 읽기, 당신은 내가 프라 그마 팩을 사용하여 구조체를 읽을 수 있기 때문에 내 버그 결과라고 생각합니까나는
과 같은 것을 사용하고 있습니다.FILE *pf
나는이 구조체를 읽었습니다.
픽셀 배열에 저장된 옥텟 수를 계산합니다.
그런 다음 필자는 pf의 위치에서 계속되는 8 진수를 읽었고, 이는 필자의 논리에 따라 정확히 배열이 시작되는 위치에 있어야한다.
읽어 주셔서 감사합니다.
편집 : ps : 이러한 차이점은 다음과 같습니다. bfSize는 3645라고 표시되며 속성에 3702가 표시됩니다. 이는 상당히 큰 차이입니다. bfSize 번호는 속성 번호보다 항상 작습니다.
'bfSize'가 Disk_ bytes의 _Size보다 작 으면 'bfSize'가 잘못됩니다. MSDN에서 :'bfSize' _ 비트 맵 file_의 크기를 바이트 단위로 지정합니다. –
파일을 "" "rb"'모드로여시겠습니까? –
"rb"모드로 엽니 다. 동일한 FILE * pf를 사용하여이 두 구조체를 읽습니다. 그런 다음 각 바이트를 읽습니다. – NuSuntStudent