Skocz do zawartości

Bity BITMAPy


Nemo

Recommended Posts

Sprubój:

COLORREF GetPixel(HDC hdc, int XPos, int nYPos);
COLORREF SetPixel(HDC hdc, int XPos, int nYPos);
int GetPixelFormat(HDC  hdc);
BOOL SetPixelFormat(HDC  hdc,int  iPixelFormat,CONST PIXELFORMATDESCRIPTOR *  ppfd);

Te dwie ostatnie to do czegos innego, ale... Dwie pierwsze dobra, ale wolne. Sama bitmapa ma taka strukture:

typedef struct tagBITMAP {  // bm 
   LONG   bmType; 
   LONG   bmWidth; 
   LONG   bmHeight; 
   LONG   bmWidthBytes; 
   WORD   bmPlanes; 
   WORD   bmBitsPixel; 
   LPVOID bmBits;            /* Points to the location of the bit values for the bitmap. The bmBits member must be a long pointer to an array of character (1-byte) values.  */
} BITMAP;

wiec możesz spróbować ręcznie się do bitów dobrać.

Link do komentarza
Udostępnij na innych stronach

A i jeszcze zapomniałem do wyciągania samych kolorków:

BYTE GetRValue(DWORD rgb);
BYTE GetGValue(DWORD rgb);
BYTE GetBValue(DWORD rgb);

Ale nie problemem było by chyba ręczne rozszyfrowanie COLORREF. Swoją drogą pochwalę się udoskonalonym makrem RGB. Mianowicie, prosze państwa RGBA(r,g,b,a); :

#define RGBA(r, g ,b, a)  ( (DWORD) ( ((BYTE) (r)) | ((WORD) (g) << 8) ) | (DWORD) ( ((DWORD) (b) << 16) | ((DWORD) (a) << 24) ) )

Na co to? W NT'kach, a właściwie od 2k w góre znaczenie ma wartość 'a'. Przy odwracaniu koloru i nie tylko:

~RGB(rr,gg,bb) = ~(0x00rrggbb) 

daje to kolor zawsze czarny. A

~RGBA(rr,gg,bb,0xFF) = ~(0xFFrrggbb)

co daje kolor właściwy. Może się to także przydać do cieniowania w tych systemach, ale nie sprawdzałem. Dobra kończe, bo przynudzam.

Link do komentarza
Udostępnij na innych stronach

Dzikei za odpowiedz - dostalem nawet za duzo bo wiekszosc funkcji co pdoales to znam no ale moze komus sie przyda.
A zadalem to pytanie bo kurde eni wiedzxialem jak wyciagnac dane z tego bmp.bmBits. No i teraz przypadkiem doszlem do tego ze ten daleki wskaźnik wskazuje na NULL więc mam mały problem. Wie ktoś co z tym zrobic??

ps
makro RGBA sie przyda ;)

Link do komentarza
Udostępnij na innych stronach

Pewnie powiecie że się mądrze.... ;) Ale powiem wam pewną ciekawostkę 9_9 :

To na co mówicie bitmapy to błędna nazwa (ale się przyjęła), pochodząca z czasów Win 3.x, kiedy to każdy pixel był czarno-biały i kodowało go się za pomocą jednego bitu. Więc teraz powinno się na to mówić pixmapy (albo coś w tym stylu).

Taki off-topic

A teraz na temat:
ten kolor a to nie jest przypadkiem alpha (przezroczystość)?

Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...