Nemo Napisano Lipiec 31, 2018 Autor Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Gucio Napisano Lipiec 31, 2018 Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Gucio Napisano Lipiec 31, 2018 Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Nemo Napisano Lipiec 31, 2018 Autor Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Quad Napisano Sierpień 2, 2018 Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
Gucio Napisano Sierpień 2, 2018 Zgłoś Udostępnij 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 Link do komentarza Udostępnij na innych stronach More sharing options...
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.