Skocz do zawartości
mkauba

[c] Program Pobierający Info Z Nagłówka Bitmapy I Wyświetlający Je.

Rekomendowane odpowiedzi

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ę. :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez Dj_AnT

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...