tablica bitów czy bajtów pomocyy!!!plz

0

Witam. Mam taki pewien maly problem.
Oto on:

/-/
/********************************************************

  • Nazwa: Graph *
  •   				   *
    
  • Cel: *
  • Prezentacja zastosowania bitmapy. *
  •  		                                 *
    
  • Algorytm: Definiuje tablice bitow dla bitmapy, *
  • rysuje przekatne w poprzek tablicy, *
  • a nastepnie wyswietla wynik. *
  •  					              *
    
  • Zastosowanie: *
  • Uruchom program i spojrz na wyswietlony obraz. *
    ********************************************************/
    /+/
    #include <stdio.h>

#define X_SIZE 40 /* wymiar tablicy w kierunku osi X /
#define Y_SIZE 60 /
wymiar tablicy w kierunku osi Y /
/

  • Ze wzgledu na umieszczanie 8 bitow w bajcie stosujemy X_SIZE/8
    /
    char graphics[X_SIZE / 8][Y_SIZE]; /
    dane bitmapy */

#define SET_BIT(x,y) graphics[(x)/8][y] |= (0x80 >>((x)%8))

int main()
{
int loc; /* aktualnie ustawiane polozenie /
void print_graphics(void); /
wyswieltenie danych */

for (loc = 0; loc < X_SIZE; ++loc)
    SET_BIT(loc, loc);

print_graphics();
return (0);

}
/*******************************************************************

  • funkcja print_graphics -- wyswietla bitmape skladajaca sie *

  • z tablicy bitow (zbioru zawierajacego znaki ?X? i ?.?). *
    ******************************************************************/
    void print_graphics(void)
    {
    int x; /
    aktualna wartosc wspolrzednej x /
    int y; /
    aktualna wartosc wspolrzednej y /
    unsigned int bit; /
    bit sprawdzany w aktualnym bajcie */

    for (y = 0; y < Y_SIZE; ++y) {
    /* petla wykonywana dla kazdego bajtu tablicy /
    for (x = 0; x < X_SIZE / 8; ++x) {
    /
    przetwarzanie kazdego bitu */
    for (bit = 0x80; bit > 0; bit = (bit >> 1)) {
    if ((graphics[x][y] & bit) != 0)
    printf("X");
    else
    printf(".");
    }
    }
    printf("\n");
    }
    }

i w tym oto programie jest linijka taka:
char graphics[X_SIZE / 8][Y_SIZE]; /* dane bitmapy */

chciałbym kogos prosic o wytłumaczenia mi dlaczego współżędna X_SIZE jest przerabiana na bajty (X_SIZE/8) a Y_SIZE juz nie?? Rozmiar bitmapy jest zdefiniowany w bitach co mówi linia:
#define X_SIZE 40 /* wymiar tablicy w kierunku osi X /
#define Y_SIZE 60 /
wymiar tablicy w kierunku osi Y */
pożniej współżedna x jest przerabiana na bajty jak wspomniałem wyzej a y juz nie.
A w ksiązce wczesniej jeszcze pisze ze jesty to tablica 5na40 pikseli. Jak to mozliwe?? ;( ;( Ja tu widze tablice co najwyzej 5 na 40 ale bajtów

Prosze o pomoc. Ja juz nic z tego nie rozumie;(

0

Bajt to 8 bitów, >> i & to operatory bitowe, resztę sobie dośpiewaj.

0

z tym ze obrazek ma wymiar Y = 40 to nie jest prawda. Ma wymiar 60, lecz do pozycji 40= szerokosci obrazka generuje "X", pozostale 20 to "." czyli bity 0

Natomiast wymiar X = 5 sie zgadza. zauwaz, ze typ char jest 8 bitowy, a program analizuje tablice bit po bicie. jesli wiec 1char = 8bitow i przemnozymy to przez X_SIZE/8=5 a 8*5=40 BITOW, czyli tyle ile wynosci rozmiar X twojego ascii obrazka. Mozna by zrobic tablice bez dzielenia X_SIZE /8 ale tutaj pomysl: 1char = 8 bitow, a potrzebujesz uzywac tylko jednego bitu. po co wiec marnowac pamiec dla pozostalych 7? Przy takim maly rozmiarze obrazka to nie ma znaczenia, ale przy wiekszych rozmiarach...

1 użytkowników online, w tym zalogowanych: 0, gości: 1