[C++] Pobieranie informacji o pixelu na ekranie

0

Mam taki problem, którego nie moge niestety rozwiązać na innym forum.
Rzecz w tym, iż zamierzam w moim programie operować na pixelach :d . Program ma otrzymacz od usera konkretną lokalizację punktu na monitorze po czym ma pobrać informacje RGB o nim. Przedstawie to krokowo.

  1. Program pobiera informacje od usera, o punkcie(np. osoba podaje punkt 673x1045)
  2. Program "pobiera" z monitora wartości RGB o punkcie
  3. Wydrukuje na ekranie dane RGB(np. 145,23,201)

Na google szukałem ale znalazłem do WinAPI fukncję która pobiera pixele z okienka programu,a to nie może być, ponieważ ja chcę aby on pobierał informacje z dowolnego punktu. Nie wiem, moze sie przewidziałem ;-P

Ma ktoś pomysły?

0

poszukaj czegos takiego:
GetWindowDC() i GetDesktopWindow()

to chyba powinno Ci pomoc.

0

hmmm... zrobiłem coś takiego:

#include <windows.h>
#include <iostream>
using namespace std;

int main(){
HDC hdc;
hdc = GetWindowDC(NULL);
COLORREF clr = GetPixel(hdc,1000,600);
cout << clr;
}

no i właśnie tu mi coś nie wychodzi :|
zrobiłem nawet taki eksperyment, że otworzyłem na całe okno notatnik i mam cały ekran biały, a on mi jakieś dziwne wartości zwraca(16777215)
No nie wiem czemu ale kolor biały ma wartości 255,255,255 ;-P

Co źle robię, że takie badziewie mi wychodzi???

0

Zwraca 16777215 bo to są 3 bajty, każdy po 255 - 0xFFFFFF. Musisz sobie ręcznie rozbić tą liczbę na 3 konkretne wartości, każda po jednym bajcie.

0

łatwo sie mówi :d
znasz może jakąś funkcyje do tej czynności?

0
ram.techen napisał(a)

łatwo sie mówi :d
znasz może jakąś funkcyje do tej czynności?

funkcyji nie znam, ale mam odrobinę chęci:

COLORREF clr = GetPixel(hdc,1000,600)  
char red = clr&0x000000ff;  // COLORREF -> BGR
char green = (clr>>8)&0x000000ff;
char blue = (clr>>16)&0x000000ff;

1 użytkowników online, w tym zalogowanych: 0, gości: 1