Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Ottenere il colore di un pixel
Forum - C/C++ - Ottenere il colore di un pixel

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
NickoMaiden (Normal User)
Pro


Messaggi: 115
Iscritto: 10/06/2009

Segnala al moderatore
Postato alle 23:58
Sabato, 19/12/2009
ho girovagato su google e il risultato è stato GetPixel() e CreateDIBSection().
voglio ottenere il colore di un pixel sullo schermo in tre variabili (R,G,B).
Qualcuno mi darebbe una dritta su come utilizzare queste funzioni dato che non ci ho capito nulla dai risultati di google?
(e soprattutto, perchè quando provo ad usarla mi da questo errore:
  [Linker error] undefined reference to `GetPixel@12'
?
)

uso il compilatore bloodshed dev-c++

EDIT by HeDo: Siamo nella sezione C++, è inutile scriverlo nel titolo

Ultima modifica effettuata da HeDo il 15/01/2010 alle 10:22
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 1:01
Domenica, 20/12/2009

prima cosa cambia compilatore, il dev lo sconsiglio, su queste cose cade clamorosamente. Usa Visual C++ Express 2008.

cmq devi includere la libreria gdi32.lib :)

sull'uso della GetPixel è tutto nell'msdn: http://msdn.microsoft.com/en-us/library/dd144909%28VS.85%2 ...

cmq si presuppone che prima di "prendere una funzione a caso e capire come si usa" si studi un attimino ciò che c'è dietro al posto di postare su un forum dicendo "non ho capito nulla".

Detto questo, per comprendere _come_ usarla devi sapere cos'è un Device Context e un Window Handle di una form. La GetPixel si aspetta un hDC in input e per ottenerlo da un hWnd ci sono funzioni come GetWindowDC. Per ottenere l'hWnd di una specifica finestra bisogna usare opportunamente funzioni come FindWindow o EnumWindows.

Come vedi la situazione è ben più complicata di una funzione con 3 semplici parametri :)

PM Quote
Avatar
NickoMaiden (Normal User)
Pro


Messaggi: 115
Iscritto: 10/06/2009

Segnala al moderatore
Postato alle 15:50
Domenica, 20/12/2009
bene grazie, oggi che ho un po di tempo libero mi metto un po a studiarmi queste cose.

PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 23:04
Domenica, 20/12/2009
interessa anche a me!! infatti l'avevo già fatta anche io questa domanda ma non ero riuscito a risolvere il problema! :rofl: quando trovi una soluzione puoi postare il codice?

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 0:19
Lunedì, 21/12/2009
Testo quotato

Postato originariamente da giuseppe93:

interessa anche a me!! infatti l'avevo già fatta anche io questa domanda ma non ero riuscito a risolvere il problema! :rofl: quando trovi una soluzione puoi postare il codice?



non è una "soluzione", è solo lo studio di un'architettura e del funzionamento del sottositema grafico di windows, il che include la conoscenza di alcune api.


PM Quote
Avatar
NickoMaiden (Normal User)
Pro


Messaggi: 115
Iscritto: 10/06/2009

Segnala al moderatore
Postato alle 7:03
Lunedì, 21/12/2009
Testo quotato

Postato originariamente da giuseppe93:

interessa anche a me!! infatti l'avevo già fatta anche io questa domanda ma non ero riuscito a risolvere il problema! :rofl: quando trovi una soluzione puoi postare il codice?




certo!

PM Quote
Avatar
NickoMaiden (Normal User)
Pro


Messaggi: 115
Iscritto: 10/06/2009

Segnala al moderatore
Postato alle 10:18
Lunedì, 21/12/2009
ci sono riuscito, ecco il codice sorgente:
per chi ha il compilatore dev c++ deve impostare il progetto come gui altrimenti da linker error


Codice sorgente - presumibilmente C++

  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <windows.h>
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.    
  10. POINT pos;
  11. GetCursorPos (&pos);
  12. HDC hScreenDC = GetDC (NULL);
  13. COLORREF rgb = GetPixel (hScreenDC, pos.x, pos.y);
  14. int red = GetRValue (rgb);
  15. int green = GetGValue (rgb);
  16. int blue = GetBValue (rgb);
  17.  
  18. //siccome il progetto è impostato come gui non funzionano gli input/output su consolle
  19. //quindi provvisoriamente ho risolto cosi
  20. char buffer[255];
  21.  itoa (red,buffer,10);
  22. MessageBox(NULL, buffer, "ROSSO", MB_OK);
  23. itoa (green,buffer,10);
  24. MessageBox(NULL, buffer, "VERDE", MB_OK);
  25. itoa (blue,buffer,10);
  26. MessageBox(NULL, buffer, "BLU", MB_OK);
  27.    
  28.    
  29.    
  30.     system("PAUSE");
  31.    
  32.     return EXIT_SUCCESS;
  33. }




anche se a me è servito a poco perchè mi serviva per fare un pixel bot e il sistema di protezione se ne accorge e mi da sempre nero, cmq non mi arrendo: ho trovato delle sorgenti gia pronte che tramite le stesse funzioni fanno uno screenshot e si vede per bene, magari ce la faccio ad adattarlo a quello che mi serve

Ultima modifica effettuata da NickoMaiden il 21/12/2009 alle 10:26
PM Quote
Avatar
giuseppe93 (Ex-Member)
Pro


Messaggi: 166
Iscritto: 02/08/2009

Segnala al moderatore
Postato alle 23:02
Lunedì, 21/12/2009
Testo quotato


HDC hScreenDC = GetDC (NULL);
COLORREF rgb = GetPixel (hScreenDC, pos.x, pos.y);


ma se non prendi l'handle di una finestra come fai ad ottenere il colore? cioè stai cercando di chiedere il colore di un immagine uguale a nulla...
dico bene?
tipo per controllare i colori del desktop basta fare
HDC hScreenDC = GetDC (GetDesktopWindow());
e poi puoi continuare...

PM Quote
Avatar
NickoMaiden (Normal User)
Pro


Messaggi: 115
Iscritto: 10/06/2009

Segnala al moderatore
Postato alle 2:23
Martedì, 22/12/2009
in teoria sarebbe cosi, però siccome facendo diversamente non funziona.... boh forse non vedo io dov'è che sbaglio

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo