GetPixel
jest powolny z dwóch powodów:
Skoro jesteś sondowania ekran - każde wezwanie do GetPixel
prowadzi do transakcji do sterownika wideo, który z kolei bierze piksel dane z pamięci wideo.
W constrast użyciu GetPixel
na DIBs jest znacznie szybszy.
Zresztą GetPixel
robi kilka rzeczy, w tym współrzędne obcinania/przekształceń itp
tak, że jeśli używasz do kwerendy wiele wartości pikseli na raz - należy spróbować zorganizować to w jednym transakcję do sterownika GDI/wideo.
Za pomocą GDI powinieneś utworzyć DIB o odpowiednim rozmiarze (patrz CreateDIBSection
). Po utworzeniu otrzymasz bezpośredni wskaźnik do danych bitów obrazu. Następnie skopiuj część obrazu do DIB (patrz BitBlt
). Nie zapomnij również zadzwonić pod numer GdiFlush
, zanim faktycznie sprawdzisz zawartość DIB (ponieważ sterowniki wideo mogą wykonywać rysowanie asynchroniczne).
Używając GD + możesz faktycznie zrobić to samo, z nieco prostszą składnią.
Jakiego rodzaju użycie jest potrzebne? Może warto chwycić region na ekranie, a następnie próbkować z niego piksele. – hometoast
Moja aplikacja pozwala użytkownikowi na próbkowanie kolorów z dowolnego miejsca na ekranie (poza moją aplikacją) w czasie rzeczywistym. +1 Dobry pomysł na ograniczenie do regionu: Zobaczę, czy mogę to zrobić. – stucampbell