Nemo Napisano Lipiec 31, 2018 Autor Zgłoś Napisano Lipiec 31, 2018 Jak po wczytaniu bitmapy dorwać się do pixeli w celu wyciągniecia z nich kolorów RGB. Chodzi mi głównie o bitmapy 24bitowe. Mile widziany jakiś kod lub funkcyjki ;) Cytuj
Gucio Napisano Lipiec 31, 2018 Zgłoś Napisano Lipiec 31, 2018 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ć. Cytuj
Gucio Napisano Lipiec 31, 2018 Zgłoś Napisano Lipiec 31, 2018 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. Cytuj
Nemo Napisano Lipiec 31, 2018 Autor Zgłoś Napisano Lipiec 31, 2018 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 ;) Cytuj
Quad Napisano Sierpień 2, 2018 Zgłoś Napisano Sierpień 2, 2018 Pewnie powiecie że się mądrze.... Ale powiem wam pewną ciekawostkę : 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ść)? Cytuj
Gucio Napisano Sierpień 2, 2018 Zgłoś Napisano Sierpień 2, 2018 Yes, we have a winner. Tyle, ze napisalem to makro na potrzeby programu dzialajacego w 9x i NT, wiec uzywam tylko wartosci przydatnych przy odwracaniu koloru (0x00, 0xFF). Pod Win9x ta czesc koloru w gdi jest olewana i moze byc dowolna. Cytuj
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.