Przechodzę przez część ekranu i skanuję piksele w określonym zakresie kolorów.GetDIBits i przechodzenie między pikselami za pomocą X, Y
Spojrzałem na przykład MSDN's Capturing an Image i wiem, jak korzystać z funkcji.
Mogę dostać bity do tablicy, ale nie jestem pewien, jak to zrobić w taki sposób, że mogę przechodzić przez niego tak jak ja obraz. Pseudo-przykład (który jestem pewien, jest daleko):
for (x = 1; x <= Image.Width; x += 3)
{
for (y = 1; y <= Image.Height; y += 3)
{
red = lpPixels[x];
green = lpPixels[x + 1];
blue = lpPixels[x + 2];
}
}
To w zasadzie to, co chcę zrobić, więc jeśli czerwony, niebieski i zielony jest pewien kolor, będę wiedział co koordynować to na (x, y) na obrazie.
Po prostu nie wiem, jak używać GetDIBits w taki sposób i jak poprawnie skonfigurować tablicę, aby móc to zrobić.
W kodzie brakuje brakującej instrukcji, która inicjuje MyBMInfo .bmiHeader.biSize = sizeof (MyBMInfo); – xMRi
@xMRi Masz rację, dziękuję za zauważenie błędu. Myślę, że to jest naprawione teraz, przeniosłem inicjalizację przed pierwszym wywołaniem 'GetDIBits'; AFAIK nie wymaga ponownej inicjalizacji po pierwszym połączeniu. – dyp
Hmmm. Nie jestem tego pewny. Próbowałem tego w moim kodzie i jeśli wykonam drugie wywołanie funkcji GetDIBits, otrzymuję komunikat o błędzie, że lokalna struktura otrzymuje bufor Overflow na stosie ... W końcu powróciłem do rozwiązania, gdybym ręcznie zainicjował strukturę. W niektórych przypadkach nie chcesz mieć kompresji. Odrzucenie informacji spowoduje ponowne użycie kompresji ... Nie jestem pewien, czy to prawda. Ale nie miałem czasu, aby to sprawdzić dalej. – xMRi