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)
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())
;)
Color pixel = new Robot().getPixelColor(x, y);
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, 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
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.