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.
zamiana bitmapy na macierz
-
- 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
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.
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.
-
- 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
Jeżeli możesz to wyślij mi ten program na adres:andrewha@o2.pl.
Z góry dziękuje.
Z góry dziękuje.
-
- 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
ok, już wysyłam.
kod dla kompilatora mingw
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;
}