zamiana bitmapy na macierz

andrewha
Użytkownik
Użytkownik
Posty: 111
Rejestracja: 21 cze 2007, o 20:59
Płeć: Mężczyzna
Lokalizacja: Szczebrzeszyn
Podziękował: 19 razy
Pomógł: 14 razy

zamiana bitmapy na macierz

Post autor: andrewha »

Mam prośbę, czy wie ktoś jak zamienić bitmapę (czarno-białą) na macierz (zero-jedynkową). W jakim programie to można zrobić i w jaki sposób?
Słyszałem, że można to zrobić w matematice, ale nie wiem jak. czodzi o to abt program zamienił bitmape na macierz (biały piksel na 0 a czarny na jeden). Jeżeli ktopś wie jak to zrobić to bardzo prosze o pomoc.
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

zamiana bitmapy na macierz

Post autor: smiechowiec »

Daj jakiś namiar to Ci prześlę program do konwersji czarno białej bitmapy na macierz.
Sposób wywołania programu
bmp2tab testbmp.bmp > macierz.txt
gdzie testbmp.bmp to czarno biały plik z obrazkiem, a macierz.txt to plik tekstowy z macierzą zer i jedynek.
andrewha
Użytkownik
Użytkownik
Posty: 111
Rejestracja: 21 cze 2007, o 20:59
Płeć: Mężczyzna
Lokalizacja: Szczebrzeszyn
Podziękował: 19 razy
Pomógł: 14 razy

zamiana bitmapy na macierz

Post autor: andrewha »

Jeżeli możesz to wyślij mi ten program na adres:andrewha@o2.pl.
Z góry dziękuje.
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

zamiana bitmapy na macierz

Post autor: smiechowiec »

ok, już wysyłam.

kod dla kompilatora mingw

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>

typedef struct tagBITMAP {             /* struktura bitmapy */
  short width;
  short height;
  short h2;
  char data[768][128]; // 768 x 1024
	short bitcount;
} BITMAP;


/**************************************************************************
 *  load_bmp                                                              *
 *    Wczytaj bitmape z pliku do tablicy                                  *
 **************************************************************************/

void load_bmp(char *file,BITMAP *b)
{
  FILE *fp;
  long index;
  short num_colors;
  int x, y;

  /* otworz plik */
  if ((fp = fopen(file,"rb")) == NULL)
  {
    printf("Blad w otwieraniu pliku %s.\n",file);
    exit(1);
  }

  /* zobacz czy to jest poprawny plik bitmapy (kazda bitmapa zaczyna sie od 'BM' wewnatrz pliku */
  if (fgetc(fp)!='B' || fgetc(fp)!='M')
  {
    fclose(fp);
    printf("%s To nie jest plik bitmapy ! \n",file);
    exit(1);
  }

  /* przeczytaj szerokosc i wysokosc bitmapy, i liczbe kolorow uzywanych w niej;
  ignoruj reszte ! */
  fseek(fp,16, SEEK_CUR);
  fread(&b->width, 2, 1, fp);
  fseek(fp,2, SEEK_CUR);
	fread(&b->height, 2, 1, fp);
  fseek(fp,4, SEEK_CUR);
	fread(&b->bitcount,2, 1, fp);
  fseek(fp,16, SEEK_CUR);
  fread(&num_colors, 2, 1, fp);
  fseek(fp,6, SEEK_CUR);
	
	if ( !(b->width % 8) )
    b->h2 = b->width / 8;
	else
    b->h2 = (b->width / 8) + 1;
	if ( (b->h2 % 4) )
    b->h2 = b->h2 + (4 - (b->h2 % 4));
  printf("Rozmiar : %ix%i, ilosc bitow : %i, ilosc kolorow : %i\n", b->width, b->height, b->bitcount, num_colors);
	
  /* zakładamy,że pracujemy na pliku 1 - bitowym */
  if (num_colors==0) num_colors=2;

  /* Ingoruj informacje na temat palety kolorów. */

  /* czytaj bitmape */
  for(y = b->height - 1; y >= 0; y--)
    for(x = 0; x < b->h2; x++)
      b->data[y][x] = (char) fgetc(fp);

  fclose(fp);
}

/**************************************************************************
 *  draw_bitmap                                                           *
 *    Draws a bitmap.                                                     *
 **************************************************************************/

void draw_bitmap(BITMAP *bmp){
  int i, j, k;
  char data;

  for(j = 0; j < bmp->height; j++) {
		printf("\n");
    for(i = 0; i < bmp->h2; i++) {
      data = bmp->data[j][i];
			for(k = 0; k < 8; k++) 
				if ( ((int) data) & ( 1 << k) )
				  printf("1");
				else
				  printf("0");
    }
  }
}


/**************************************************************************
 *  Main                                                                  *
 **************************************************************************/

int main(int argc, char *argv[]) {
  int i,x,y;
  BITMAP bmp;
  load_bmp(argv[1], &bmp); 
  draw_bitmap(&bmp);
  return 0;
}
ODPOWIEDZ