Newsgroup: it.comp.lang.visual-basic
Titolo: GetPixel

Ciao, volevo sapere come utilizzare l'api GETPIXEL (se c'entra qualcosa!)
per trovare il valore RGB di un punto qualsiasi dello schermo.
Grazie
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 per trovare il valore RGB di un punto qualsiasi dello schermo.
Credo ti convenga usare la funzione BitBlt o StretchBlt, ti permettono di
copiarae una parte di schermo un un tuo buffer... dopodiche' puoi farne quel
che vuoi del buffer...
hope it helps
rIO

 che vuoi del buffer...
uhm...credo che sia più semplice la funzione GetPixel: mi serve (e non so
farlo) l'handle (HDC) dell'oggetto da cui devo testare un pixel, dandogli
delle coordinate.
Guido


 Guido
Declare Function WindowFromPoint Lib "user32.dll" (ByVal xPoint As Long,
ByVal yPoint As Long) As Long
Declare Function GetDC Lib "user32.dll" (ByVal hWnd As Long) As Long
Dim RethWnd as long
RethWnd=windowfrompoint(x,y)
getdc(rethEnd) 'evvualà
Ciao
Alessandro
--
Morfeus®
Free Joint
:PII

 getdc(rethEnd) 'evvualà
... tue cose ...
' *** IMPORTANTE ***
ReleaseDC(hwnd, hdc)
Ciao

 [CUT]
si, ma poi che faccio?
dopo aver scritto
RethWnd = WindowFromPoint(x, y)
RethDC = GetDC(RethWnd) 
se ci metto
RGBVAL = GetPixel(RethDC, x, y)
rgbval mi da sempre lo stesso valore, anche se cambio x e y...!!!!
sbaglio funzione?
Grazie,


 sbaglio funzione?
A dire il vero cosa sbagli non è che si capisce poi tanto ma ci provo lo
stesso a ipotizzare.
Il fatto che ragioni in pixel dovrebbe farti riflettere sull'uso di questa
proprietà del form
*ScaleMode*,guarda su msdn a cosa serve, quindi valuta bene che x e y che
utilizzi in GetPixel devono essere realmente in Pixel


 utilizzi in GetPixel devono essere realmente in Pixel
Del form mi importa poco. Mi serve realizzare un programma che mi dia il
valore rgb di un QUALSIASI punto dello schermo, anche (e soprattutto)
FUORI del form. Le coordinate le ricavo dalla posizione del mouse.
Quei valori (cioè le coordinate del mouse) corrispondono ai pixel? E se
non corrispondono, come posso eventualmente convertirli in pixel?
Grazie per l'attenzione,


 non corrispondono, come posso eventualmente convertirli in pixel?
dipende da come prendi le coordinate del mouse, se usi la GetCursorPos
allora sono in pixel relativi all'angolo in alto a sinistra dello schermo,
per cui vanno bene.
se vuoi poter acquisire un colore qualsiasi dello schermo ti consiglio
questo:
ScreenDC = GetDC(0) 'questo se mi ricordo bene prende un hdc valido per
l'intero schermo
RGBval = GetPixel(ScreenDC, x, y)
ReleaseDC(0, ScreenDC)
ciao, assa
--
gosclient: 
http://members.xoom.it/gosclient/
join the mailing list: 
http://groups.yahoo.com/group/gosclient/join

 ReleaseDC(0, ScreenDC)
aaaah....adesso si che funziona!!!
Grazie infinite,


 Quei valori (cioč le coordinate del mouse) corrispondono ai pixel?
SI
Prova questo
Crei un form con un controllo timer e due label
Private Declare Function WindowFromPoint Lib "user32.dll" (ByVal xPoint As
Long, _
ByVal yPoint As Long) As Long
Private Declare Function GetDC Lib "user32.dll" (ByVal hWnd As Long) As Long
Private Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As Long, ByVal
nXPos As Long, ByVal nYPos As Long) As Long
Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hWnd As Long,
ByVal hdc As Long) As Long
Private lpoint As POINTAPI
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As
Long
Private Sub Form_Load()
Label2.AutoSize = True
Label2.FontSize = 16
End Sub
Private Sub Timer1_Timer()
Dim retw As Long
Dim reth As Long
Dim l As POINTAPI
DoEvents
GetCursorPos l
retw = WindowFromPoint(l.x, l.y)
reth = GetDC(retw)
If reth <> 0 Then
vrgb = GetPixel(reth, l.x, l.y)
Label1 = vrgb
If Not vrgb Then Label2.ForeColor = vrgb
Refresh
End If
ReleaseDC Me.hWnd, reth
End Sub
In un Modulo
Public Type POINTAPI
    x As Long
    y As Long
End Type
E naviga sul desktop
--
MorfeusŽ
Free Joint
:PII