Posted By: Jovo () on 'CZprogram'
Title: truecolor -> indexed color
Date: Thu Jul 9 13:10:04 1998
Ahoj.
Pokud ti jde jen o konverzi, tak doporucuju Photoshop, PaintShop. Jestli to
chces naprogramovat tak mas nekolik moznosti :
- paleta 332. Ja to pouzivam, kdyz chci zobrazit vic truecolor bitmap na
obrazovce zaraz v 256color rezimech a podle me je to nejlepsi mozny postup (je
to rychly a jednoduchy). Nevyhoda je, ze nekdy to vypada trosku neprirozene,
zvlast, kdyz mate obrazek v jedne barve (treba neci oblicej vyfoceny pouze
jako cerveny obraz). Pro normalni fotky je to v pohode :
#define MAX_COL 63 - jaka je max barva v palete, vite o co jde
#define PAL_COL 225 - kolik je v palete barev
#define rgb2index(r,g,b) (((((r)*7)/PAL_COL)<<5) +
((( (g)*7)/PAL_COL)<<2) +
(( (b)*3)/PAL_COL))
void set332palette() {
int n;
for(n=0;n<=255;n++)
myset_color(n, ((n>>5)&7) * MAX_COL/7, ((n>>2)&7) * MAX_COL/7, (n&3) *
MAX_COL/3);
};
void myset_color(int i, char r, char g, char b)
{
asm {
mov ah,0x10
mov al,0x10
mov bx,i
xor bh,bh
mov dh,r
mov ch,g
mov cl,b
int 0x10
}
}
No a je to.
- dalsi moznost je adaptivni paleta. Koukni se do Zara - Pocitacova grafika,
tam je to popsano docela dobre.
- pokud jsi v tom trochu navazno, koukni se do zdrojaku knihovny Allegro pro
DJGPP (je to na kazdem simtel archivu). Tam jsou zdrojaky takrka vseho.
Navic, kdyz pracujes s DJGPP a Allegrem, tak muzes dat neco jako :
BITMAP *b = loadbitmap("ahoj.bmp"); - to vytvori bitmapu podle obrazku, kdyz
bude truecolor, tak 24 bit a tak dal. Navic to loaduje PCX, TGA a jeste neco.
BITMAP *s = create_bitmap_ex(...); nepamatuju si parametry, je tam vyska
sirka, a hlavne barevna hloubka (32,24,16,15,8,4,2bitove bitmapy)
pak muzes udelat prevodni paletu z 24 do 8bit color, ale prikaz nan to neznam,
je to v helpu. Nebo udelas neco jako :
blit(b,s); - to vezme nasi 24bit bitmapu b, prevede ji do barevne hloubky
bitmapy s (treba jsme dali 8bit) bud podle 332, optimalizovaneho algoritmu,
nebo prevodni tabulky (da se to nastavit) a blitne ji na s.
Pokud to chces rovnou na obrazovku, tak das jen blit(b,screen); a jsi doma
:-) Nevyhoda : je to nekdy dost pomale, ale pokud mas PII, tak ti top muze byt
jedno. Navic ty zdrojaky jsou vyborne zdokumentovane a autor nepouziva nejake
velke prasarny ... jo a najdes tam zdrojaky pro loadovani BMPcek vsech typu a
kompresi, PCXek, TGAcek, .... proste raj :-)
jovo.