Witam jestem nowy, ponieważ niedawno się zarejstrowałem
a to dla tego że zacząłem programować w eVC++ 3.0 i mam problem dla mnie nie rozwiązalny
a mianowicie zająłem się GAPI i wszystko jest ok. tylko mam problem z kolorami :/ w pda jest kolor 16 bitowy i teraz tak mam plik z paletą 256 kolorów każdy z trzech odcieni jest zapisany jednym bajtem czyli 0..255 i plka ma 768 bjatów czyli wszystko sie zgadza i teraz tak odczyt z pliku mam dobry bo sprawdzałem, ale sami jak coś możecie sprawdzić. Oto moja funkcjia do ustawiania koloru znalazłem ją na stronie
http://www.pocketpcdn.com/unsigned short PixelColor(int r, int g, int b)
{
// Calculate the pixel color from the r,g,b components.
if (g_gxdp.ffFormat & kfDirect565)
return (unsigned short) (r & 0xff) << 11 | (g & 0xff) << 6 | (b & 0xff);
else
return (unsigned short) (r & 0xff) << 10 | (g & 0xff) << 5 | (b & 0xff);
}
i teraz jak wszystko odpalam to wyświetlona paleta nie zgadza się z parwdziwą tzn. źle wyświetla kolory oto jak wyswietla
http://www.krzysiek147.republika.pl/obrazki/pda/2.jpg i tak dla przykładu pierwsza linia powinna być przejściem od koloru białego do czarnego, to są moje funkcje:
unsigned short *InitPaleta()
{
unsigned short *paleta;
paleta = new unsigned short[256];
return paleta;
}
void DeletePaleta(unsigned short *paleta)
{
delete paleta;
}
bool UstawPalete(LPCTSTR nazwa, unsigned short *paleta)
{
struct rgb
{
unsigned char r;
unsigned char g;
unsigned char b;
};
FILE *plik;
unsigned short *kolor = paleta;
rgb color;
if((plik=_wfopen(nazwa,L"rb"))!=NULL)
{
for( int i=0; i<256; i++)
{
fread(&color,sizeof(color),1,plik);
*kolor = PixelColor(color.r,color.g,color.b);
kolor++;
}
}
else
{
MessageBox(hwndMain,L"Nieudało się otworzyć pliku",L"error",MB_OK);
return false;
}
fclose(plik);
return true;
}
dalej sprawdziłem jak PDA wyświetli kolory i zrobiłem prostą funckjie oto ona:
void Rysuj(int x, int y)
{
int i=0;
unsigned short *start;
start = InitDraw();
if(start)
{
for(i=0; i<256; i++)
Prostokat(x,y+i,25,1,PixelColor(i,0,0),start);
for(i=0; i<256; i++)
Prostokat(x+26,y+i,25,1,PixelColor(0,i,0),start);
for(i=0; i<256; i++)
Prostokat(x+52,y+i,25,1,PixelColor(0,0,i),start);
}
CloseDraw();
}
i wyświetlone powinny być trzy pasy odpowiednio r,g,b od czarnego płynnie przechodząc w kolor a tu mi wyswietla o tak:
http://www.krzysiek147.republika.pl/obrazki/pda/4.jpg a jak tu widać na każdy kolor jest 8 paseczków tego płynnego przejścia. Jak tak pomyslałem to, to jest wysztko dobrze jeśli chodzi o obliczenia bo w 16 bitach każdy odcien jest opisany przez 5 bitów czyli od 0..31 wiec jak ja mu podaje wartość odcienia z przedziału 0..255 to powinienem ją podzielić przez 8 i powinno być dobrze i w tej funkcji do wyświetlania tych pasków działa to dobrze i wyswietla tak jak powinno czyli
http://www.krzysiek147.republika.pl/obrazki/pda/5.jpg ale moim programie z tą paletą to nie działa. Te dzielienie przez 8 wstawiłem przy zapisywaniu koloru w palecie czyli wtej części funkcji void Rysuj(int x, int y):
*kolor = PixelColor(color.r/8,color.g/8,color.b/8);
i tak o prosze jak mi to wyswietla:
http://www.krzysiek147.republika.pl/obrazki/pda/6.jpg same czarne i ziolone no i ten jaskrawy niebieski.i teraz pytanie do Was
Dlaczego to nie działa !!
i przepraszam że tak się rozpisałem ale chciąłem dobrze przedstawić problem i mój tok myslenia, jak namieszałem to też przepraszam.
Prosze o pomoc może ktoś mi powie co ja robie źle?
aha jesli trzeb to to jest ta paleta kolorów
http://www.krzysiek147.republika.pl/obrazki/pda/default.pal i dla wyjaśnienie testowałem rózne wersje tzn. jakie tylko znalazłem tej funkcji koloru piksela i każda wyswietla tak samo :/