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. 

Search the boards