mkauba Opublikowano 23 Listopada 2009 Zgłoś Opublikowano 23 Listopada 2009 U mnie z programowaniem coraz lepiej, ale niestety z czasem gorzej. Jakby ktoś mógłby pomóc napisać program w C, który będzie wyciągał informację z nagłówka pliku o rozszerzeniu bmp, i wyświetla je. W sumie to będę wdzięczny za każdą wskazówkę. :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
kfgz Opublikowano 23 Listopada 2009 Zgłoś Opublikowano 23 Listopada 2009 (edytowane) Masz gotowca. Kiedyś się tym bawiłem. Oczywiście nie daję gwarancji, że to będzie działać ;) bmp_f.h #define b3 16777216#define b2 65536#define b1 256int IsBmp(unsigned char *rh) { if(rh[0] == 'B' && rh[1] == 'M') // "BM" if(rh[6] == 0x00 && rh[7] == 0x00 && rh[8] == 0x00 && rh[9] == 0x00) // reserved = 0 if(rh[26] == 0x01 && rh[27] == 0x00) // number of planes = 1 if(rh[14] == 0x28 && rh[15] == 0x00 && rh[16] == 0x00 && rh[17] == 0x00) // bitmapinfoheader = 40 return 1; return 0;}int BitDepth(unsigned char *rh) { return b1 * rh[29] + rh[28];}int BmpWidth(unsigned char *rh) { return b3 * rh[21] + b2 * rh[20] + b1 * rh[19] + rh[18];}int BmpHeight(unsigned char *rh) { return b3 * rh[25] + b2 * rh[24] + b1 * rh[23] + rh[22];}int RowSizePad(int bitdepth, int bmpw) { return 4 * int((bitdepth * bmpw + 31) / 32);}float PixVal(unsigned char *rh, int x, int y, int bmphm1, int bitsdiv8, int col, int rowsizepad) { int idx; idx = 54 + rowsizepad * (bmphm1 - y) + x * bitsdiv8 + col; return (rh[idx] - 127) / 135.0;} #include <stdio.h>#include <stdlib.h>#include "bmp_f.h"#define xstep 1#define ystep 1unsigned char *arr;void FileNotFound(char *path) { printf("Error: %s file not found!\n", path);}int OpenFile(char *path) { FILE *inp; int file_size; char t; int pos = 0; if(!(inp = fopen(path, "rb"))) { FileNotFound(path);exit(1);} fseek(inp, 0, SEEK_END); file_size = ftell(inp); fseek(inp, 0, SEEK_SET); arr = new unsigned char [file_size]; while(!feof(inp)) { fscanf(inp, "%c", &t); arr[pos] = t; pos++; } fclose(inp); if(!IsBmp(arr)) { printf("\nERROR: not a valid BMP file!\n\n"); exit(0); } return 0;}int main(int argc, char* argv[]) { char path[] = "test.bmp\0"; int bmpwm1, bmphm1, rowsizepad, i, j, bitsdiv8; float pix; OpenFile(path); bmpwm1 = BmpWidth(arr) - 1; bmphm1 = BmpHeight(arr) - 1; rowsizepad = RowSizePad(BitDepth(arr), bmpwm1 + 1); bitsdiv8 = BitDepth(arr) / 8; for (i = 0; i <= bmphm1; i += ystep) for (j = 0; j <= bmpwm1; j += xstep) { pix = PixVal(arr, j, i, bmphm1, bitsdiv8, 0, rowsizepad); } return 0;} Tak w ogóle to poczytaj sobie poniższe linki żebyś wiedział o co chodzi. http://en.wikipedia.org/wiki/BMP_file_format http://www.fastgraph.com/help/bmp_header_format.html Edytowane 23 Listopada 2009 przez Dj_AnT Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...