0
0x10
Gość
Szukałem ale nic nie znalazłem na temat szukania pixelu po kolorze.
EDIT. Przeprasz za pomyłkę w Temacie ;D ale pisałem to na szybko ;]
EDIT. Przeprasz za pomyłkę w Temacie ;D ale pisałem to na szybko ;]
[COLOR=green]// ColorPicker - pobieracz kolorów[/COLOR]
[COLOR=blue]#include[/COLOR] [COLOR=gray]<string>[/COLOR]
[COLOR=blue]#include[/COLOR] [COLOR=gray]<sstream>[/COLOR]
[COLOR=blue]#define[/COLOR] WIN32_LEAN_AND_MEAN
[COLOR=blue]#include[/COLOR] [COLOR=gray]<windows.h>[/COLOR]
[COLOR=blue]#include[/COLOR] [COLOR=gray]<windowsx.h>[/COLOR]
[COLOR=gray] [/COLOR]
[COLOR=gray] [/COLOR]
[COLOR=green]// dane okna[/COLOR]
std::string g_strKlasaOkna = [COLOR=gray]"od0dogk_ColorPicker_Window"[/COLOR];
HWND g_hwndOkno = NULL;
[COLOR=green]// uchwyt do kontekstu ekranu[/COLOR]
HDC g_hdcEkran = NULL;
[COLOR=green]// pobrany kolor[/COLOR]
COLORREF g_clKolor = RGB([COLOR=maroon]255[/COLOR], [COLOR=maroon]255[/COLOR], [COLOR=maroon]255[/COLOR]); [COLOR=green]// początkowo biały[/COLOR]
[COLOR=green]//------------------- procedura zdarzeniowa okna------------------------ [/COLOR]
LRESULT CALLBACK WindowEventProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
[COLOR=blue]switch[/COLOR] (uMsg)
{
[COLOR=blue]case[/COLOR] WM_LBUTTONDOWN:
[COLOR=green] [/COLOR][COLOR=green]// łapiemy myszkę[/COLOR]
SetCapture (hWnd);
[COLOR=green] // ustawiamy kursor w kształcie celownika[/COLOR]
SetCursor (LoadCursor(NULL, IDC_CROSS));
[COLOR=blue]return[/COLOR] [COLOR=maroon]0[/COLOR];
[COLOR=blue]case[/COLOR] WM_MOUSEMOVE:
[COLOR=green] // sprawdzamy, czy myszka jest złapana[/COLOR]
[COLOR=blue]if[/COLOR] (GetCapture() == hWnd)
{
[COLOR=green] // odczytujemy współrzędne kursora[/COLOR]
POINT ptKursor;
ptKursor.x = GET_X_LPARAM(lParam);
ptKursor.y = GET_Y_LPARAM(lParam);
[COLOR=green] [/COLOR][COLOR=green]// przeliczamy je na koordynaty ekranowe[/COLOR]
ClientToScreen (hWnd, &ptKursor);
[COLOR=green] // pobieramy kolor z miejsca kursora[/COLOR]
g_clKolor = GetPixel(g_hdcEkran,
ptKursor.x, ptKursor.y);
[COLOR=green] // wymuszamy odświeżenie okna programu,[/COLOR]
[COLOR=green] [/COLOR][COLOR=green]// aby pokazać pobrany kolor[/COLOR]
InvalidateRect (hWnd, NULL, TRUE);
}
[COLOR=blue]return[/COLOR] [COLOR=maroon]0[/COLOR];
[COLOR=blue]case[/COLOR] WM_LBUTTONUP:
[COLOR=green] [/COLOR][COLOR=green]// uwalniamy mysz[/COLOR]
ReleaseCapture();
[COLOR=green] // ustawiamy kursor strzałki[/COLOR]
SetCursor (LoadCursor(NULL, IDC_ARROW));
[COLOR=blue]return[/COLOR] [COLOR=maroon]0[/COLOR];
[COLOR=blue]case[/COLOR] WM_PAINT:
{
[COLOR=green] // odrysowanie zawartości okna[/COLOR]
{
PAINTSTRUCT ps;
HDC hdcOkno;
[COLOR=green] // zaczynamy[/COLOR]
hdcOkno = BeginPaint(hWnd, &ps);
[COLOR=green] [/COLOR][COLOR=green]// pobieramy obszar klienta okna[/COLOR]
RECT rcObszarKlienta;
GetClientRect (hWnd, &rcObszarKlienta);
[COLOR=green] // wypełniamy go pobranym kolorem[/COLOR]
[COLOR=green] // w tym celu najpierw tworzymy odpowiedni pędzel,[/COLOR]
[COLOR=green] // a potem wypełniamy prostokąt obszaru klienta[/COLOR]
[COLOR=green] // potem usuwamy pędzel[/COLOR]
HBRUSH hbrPedzel = CreateSolidBrush(g_clKolor);
FillRect (hdcOkno, &rcObszarKlienta, hbrPedzel);
DeleteObject (hbrPedzel);
[COLOR=green] [/COLOR][COLOR=green]// kończymy rysowanie[/COLOR]
EndPaint (hWnd, &ps);
}
[COLOR=green] // pokazanie składowych koloru[/COLOR]
{
[COLOR=green] // pobieramy te składowe i konwertujemy na napis[/COLOR]
std::stringstream Strumien;
Strumien << [COLOR=gray]"RGB: "[/COLOR] << ([COLOR=blue]int[/COLOR]) GetRValue(g_clKolor)
<< [COLOR=gray]", "[/COLOR] << ([COLOR=blue]int[/COLOR]) GetGValue(g_clKolor)
<< [COLOR=gray]", "[/COLOR] << ([COLOR=blue]int[/COLOR]) GetBValue(g_clKolor);
[COLOR=green] [/COLOR][COLOR=green]// ustawiamy ten napis jako tytuł okna programu[/COLOR]
SetWindowText (hWnd, Strumien.str().c_str());
}
[COLOR=blue]return[/COLOR] [COLOR=maroon]0[/COLOR];
}
[COLOR=blue]case[/COLOR] WM_DESTROY:
[COLOR=green] // zwalniamy kontekst ekranu[/COLOR]
ReleaseDC (NULL, g_hdcEkran);
[COLOR=green] // kończymy program[/COLOR]
PostQuitMessage ([COLOR=maroon]0[/COLOR]);
[COLOR=blue]return[/COLOR] [COLOR=maroon]0[/COLOR];
}
[COLOR=blue]return[/COLOR] DefWindowProc(hWnd, uMsg, wParam, lParam);
}
[COLOR=green]//----------------------- funkcja WinMain()---------------------------- [/COLOR]
[COLOR=blue]int[/COLOR] WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, [COLOR=blue]int[/COLOR] nCmdShow)
{
[COLOR=green] /* rejestrujemy klasę okna */[/COLOR]
WNDCLAS*** KlasaOkna;
[COLOR=green] // wypełniamy strukturę WNDCLAS***[/COLOR]
ZeroMemory (&KlasaOkna, [COLOR=blue]sizeof[/COLOR](WNDCLAS***));
KlasaOkna.cbSize = [COLOR=blue]sizeof[/COLOR](WNDCLAS***);
KlasaOkna.hInstance = hInstance;
KlasaOkna.lpfnWndProc = WindowEventProc;
KlasaOkna.lpszClassName = g_strKlasaOkna.c_str();
KlasaOkna.hCursor = LoadCursor(NULL, IDC_ARROW);
KlasaOkna.hIcon = LoadIcon(NULL, IDI_APPLICATION);
[COLOR=green] [/COLOR][COLOR=green]// rejestrujemy klasę okna[/COLOR]
RegisterClas*** (&KlasaOkna);
[COLOR=green] /* tworzymy okno */[/COLOR]
[COLOR=green] // tworzymy okno funkcją CreateWindowEx[/COLOR]
g_hwndOkno = CreateWindowEx(WS_EX_TOOLWINDOW,
g_strKlasaOkna.c_str(),
NULL,
WS_OVERLAPPED | WS_BORDER
| WS_CAPTION | WS_SYSMENU,
0, 0,
125,
80,
NULL,
NULL,
hInstance,
NULL);
[COLOR=green] // pokazujemy nasze okno i je od razu odświeżamy[/COLOR]
ShowWindow (g_hwndOkno, nCmdShow);
UpdateWindow (g_hwndOkno);
[COLOR=green] /* pobieramy kontekst urządzenia ekranu */[/COLOR]
g_hdcEkran = GetDC(NULL);
[COLOR=green] /* pętla komunikatów */[/COLOR]
MSG msgKomunikat;
[COLOR=blue]while[/COLOR] (GetMessage(&msgKomunikat, NULL, [COLOR=maroon]0[/COLOR], [COLOR=maroon]0[/COLOR]))
{
TranslateMessage (&msgKomunikat);
DispatchMessage (&msgKomunikat);
}
[COLOR=green] // zwracamy kod wyjścia[/COLOR]
[COLOR=blue]return[/COLOR] [COLOR=blue]static_cast[/COLOR]<[COLOR=blue]int[/COLOR]>(msgKomunikat.wParam);
}
Śledzeniem tzn?