Stworzyłem sobie sam funkcję która przelicza mi hex na dec:
int hex_dec(char x, char y) //Funkcja przeliczajaca hex (tablica char[2] na inta 0-255 dla koloru
{
char dane[2];
dane[0]=x;
dane[1]=y;
int wynik=0;
int a=0;
int b=0;
if(dane[0]=='1') a=1*16; //obliczanie pierwszej czesci hexa
if(dane[0]=='2') a=2*16;
if(dane[0]=='3') a=3*16;
if(dane[0]=='4') a=4*16;
if(dane[0]=='5') a=5*16;
if(dane[0]=='6') a=6*16;
if(dane[0]=='7') a=7*16;
if(dane[0]=='8') a=8*16;
if(dane[0]=='9') a=9*16;
if(dane[0]=='a') a=10*16;
if(dane[0]=='b') a=11*16;
if(dane[0]=='c') a=12*16;
if(dane[0]=='d') a=13*16;
if(dane[0]=='e') a=14*16;
if(dane[0]=='f') a=15*16;
if(dane[1]=='1') b=1; //obliczanie drugiej czesci hexa
if(dane[1]=='2') b=2;
if(dane[1]=='3') b=3;
if(dane[1]=='4') b=4;
if(dane[1]=='5') b=5;
if(dane[1]=='6') b=6;
if(dane[1]=='7') b=7;
if(dane[1]=='8') b=8;
if(dane[1]=='9') b=9;
if(dane[1]=='a') b=10;
if(dane[1]=='b') b=11;
if(dane[1]=='c') b=12;
if(dane[1]=='d') b=13;
if(dane[1]=='e') b=14;
if(dane[1]=='f') b=15;
wynik=a+b; //obliczanie wyniku
return wynik; //zwracanie wyniku w integerze
}
Tak wiem, uboga, ale na razie lepszej mi nie potrzeba. Pod colory podstawiam coś takiego:
c = hex_dec(kolor[ii],kolor[ii+1]);
color[0] = c; /* red */
ii=ii+2;
c = hex_dec(kolor[ii],kolor[ii+1]);
color[1] = c; /* green */
ii=ii+2;
c = hex_dec(kolor[ii],kolor[ii+1]);
color[2] = c; /* blue */
ii=ii+2;
Ale cosik nie trybi. Zmienna ii jest po to aby odczytywać kolejne znaki z tablicy. hex_dec z dwóch znaków hex oblicza wartość w int i wrzucam ją do zmiennej c. Zmienną c umieszczam w tablicy color, ale po "przeleceniu" całej tablicy z hexem wywala mi FC.
EDIT: Ok, już widzę, że źle generuje mi się c, tylko jeszcze nie wiem dlaczego ;)
EDIT2: Jak wywalam coutem te liczby to wypisuje mi po kolei odpowiadające danemu kodowi litery. Tak więc gdzieś zmiana typu przerzuca mi liczbę na literę :/
EDIT3: Już poradziłem sobie z zmianą typów, plik się generuje, ale niestety dalej mam błędy. Pierwsza składowa koloru generuje się elegancko. Natomiast dwie następne już nie :/ Nie mam pojęcia dlaczego. Są one generowane identycznie jak pierwsza.
Błąd jest w obrębie tego kodu:
(void) fwrite(color, 1, 3, fp);
Gdy jest standardowo wpisuje tylko jeden kolor (czerwony), gdy zmienię na:
(void) fwrite(color, 3, 3, fp);
To wczytuje wszystkie kolory, ale jako osobne 3 piksele. Nie potrafi do jednego piksela przypisać więcej niż jednego koloru :/
Aktualnie tak wygląda wypełnianie pliku:
static int color[3];
c = hex_dec(kolor[ii],kolor[ii+1]);
color[0] = c; /* red */
cout << "c: " << c << " ii: " << ii << " color[" << i << "]: " << color[0] << endl;
//getch();
ii=ii+2;
c = 0;
c = hex_dec(kolor[ii],kolor[ii+1]);
color[1] = c; /* green */
cout << "c: " << c << " ii: " << ii << " color[" << i << "]: " << color[1] << endl;
//getch();
ii=ii+2;
c = 0;
c = hex_dec(kolor[ii],kolor[ii+1]);
color[2] = c; /* blue */
cout << "c: " << c << " ii: " << ii << " color[" << i << "]: " << color[2] << endl;
//getch();
ii=ii+2;
(void) fwrite(color, 1, 3, fp);
Tyle, że zmiana typu tablicy color z static unsigned char na static int chyba nie wyszła na dobre wpisywaniu pikseli do pliku :( Nie mam pojęcia jak to wszystko zebrać do kupy. Dziś sobie chyba odpuszczę bo już dziś długo nad tym siedziałem. Mam nadzieję, że wy widzicie gdzieś jakieś błędy :)