PDA

View Full Version : [C++/C#/VB.Net/Java] Accedere direttamente alla memoria grafica


yorkeiser
12-10-2009, 09:58
Dal momento che una googlata non mi ha restituito nulla di preciso (forse è il rincoglionimento del lunedì...), mi chiedevo se qualcuno sa come risolvere questo problema: devo scrivere un programmino (il linguaggio è indifferente) che "legga" i valori dei colori dello schermo. Ovvero, mi serve l'informazione: il pixel di coordinate (x,y) - coordinate assolute dello schermo, non della singola finestra - ha colore 0xRRGGBB (supponendo di avere mpostato la profondità di colore a 24 bit). Chiaramente non chiedo il programma intero, ma solo il core della chiamata ed un'indicazione sulle eventuali librerie da includere. Dimenticavo: il S.O è un normale windows xp (ah, beati tempi della 0xA000)

MarcoGG
12-10-2009, 11:40
Beh, non so se sia aderente alla richiesta del titolo : "Accedere direttamente alla memoria grafica", ma in pratica ciò che chiedi è un semplice ScreenCapture. In VB.NET è semplicissimo :

Dim rSchermo As Rectangle = Screen.PrimaryScreen.Bounds
Dim BMP As New Bitmap(rSchermo.Width, rSchermo.Height)
Dim G As Graphics = Graphics.FromImage(BMP)
G.CopyFromScreen(Point.Empty, Point.Empty, rSchermo.Size)

'Commentare la prossima riga se non si desidera il rendering del cursore
Cursor.Current.Draw(G, New Rectangle(MousePosition, Cursor.Current.Size))

'Ottieni il colore del pixel al punto (x,y) = (100,200)
Dim C As Color = BMP.GetPixel(100, 200)
MsgBox(C.ToString())

;)

PGI-Bis
12-10-2009, 13:14
Color pixel = new Robot().getPixelColor(x, y);

fero86
12-10-2009, 15:48
MarcoGG, il rendering manuale del cursore é una pezza che io eviterei del tutto: la tua soluzione é imprecisa perché non é detto che l'hot spot del cursore presente al momento dello screenshot sia esattamente il primo pixel in alto a sinistra del cursore.

MarcoGG
12-10-2009, 19:39
MarcoGG, il rendering manuale del cursore é una pezza che io eviterei del tutto: la tua soluzione é imprecisa perché non é detto che l'hot spot del cursore presente al momento dello screenshot sia esattamente il primo pixel in alto a sinistra del cursore.

Vero, infatti fino all'ultimo non ero sicuro se includere o meno quella riga di codice, e non penso nemmeno fosse richiesta nel post d'apertura. Comunque con la freccina standard e altri puntatori simili funziona.
Ragazzi, se foste così bravi e pignoli nel suggerire soluzioni alternative quanto lo siete nel criticare quelle altrui, questo Forum sarebbe un'autentica code-bank. :p