пытаюсь читать bmp, следующим кодом
То что он работает толко с 24 битным это нормально, мне с другим и не надо работать(мне вобще bmp нужен толко для отладки алгоритма компрессии).
проблема в том что оно читается со смещением. Это обнаруживается следующим кодом
который, если я правильно понимаю, должен рисовать черный прямоугольник, вместо этого получается параллелепипед, т.е. строки в матрице идут со смещением.
Может кто сталкивалься уже и может подсказать в чем дело?
Код |
---|
#include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include "windows.h" int main(int argc, char* argv[]) { // Чтение изображения из файла FILE *pInFile = fopen("1.bmp","rb"); if(pInFile == NULL) exit(0); tagBITMAPFILEHEADER stHead; fread(&stHead,sizeof(tagBITMAPFILEHEADER),1,pInFile); tagBITMAPINFOHEADER stInfoHead; fread(&stInfoHead,sizeof(tagBITMAPINFOHEADER),1,pInFile); fseek(pInFile,stHead.bfOffBits,SEEK_SET); RGBTRIPLE ** BitMap = new RGBTRIPLE *[stInfoHead.biHeight]; for(int i = 0; i < stInfoHead.biHeight; i++) { BitMap[i] = new RGBTRIPLE[stInfoHead.biWidth]; fread(BitMap[i],sizeof(RGBTRIPLE),stInfoHead.biWidth,pInFile); } fclose(pInFile); //обработка изображения const int SIZE_BLOCK = 8; for(int i=100; i<200; i+=1) for(int j=100; j<150 ; j++) { BitMap[i][j].rgbtBlue = 0; BitMap[i][j].rgbtGreen = 0; BitMap[i][j].rgbtRed = 0; } // запись в файл FILE *pOutFile = fopen("2.bmp","wb"); if(pOutFile == NULL) exit(0); stHead.bfOffBits = sizeof(tagBITMAPFILEHEADER)+sizeof(tagBITMAPINFOHEADER); fwrite(&stHead,sizeof(tagBITMAPFILEHEADER),1,pOutFile); fwrite(&stInfoHead,sizeof(tagBITMAPINFOHEADER),1,pOutFile); for(int i = 0; i < stInfoHead.biHeight; i++) fwrite(BitMap[i],sizeof(RGBTRIPLE),stInfoHead.biWidth,pOutFile); fclose(pOutFile); return 0; } |
То что он работает толко с 24 битным это нормально, мне с другим и не надо работать(мне вобще bmp нужен толко для отладки алгоритма компрессии).
проблема в том что оно читается со смещением. Это обнаруживается следующим кодом
Код |
---|
for(int i=100; i<200; i++) for(int j=100; j<150 ; j++) { BitMap[i][j].rgbtBlue = 0; BitMap[i][j].rgbtGreen = 0; BitMap[i][j].rgbtRed = 0; } |
который, если я правильно понимаю, должен рисовать черный прямоугольник, вместо этого получается параллелепипед, т.е. строки в матрице идут со смещением.
Может кто сталкивалься уже и может подсказать в чем дело?