View Full Version : Programmino particolare
GogetaSSJ
22-07-2004, 17:23
Ciao ragazzi, vorrei realizzare un piccolo programma (in qualsiasi linguaggio mi va bene, meglio se VB6) il quale mi faccia la comparazione di colore tra 2 immagini. Mi spiego meglio:
Il puntatore del mouse dovrebbe andare in una posizione particolare, successivamente "analizzare" il colore dell'immagine (il quale è monocolore) e poi andare a trovare la stessa immagine sullo schermo.
E' fattibile una cosa simile?
Fatemi sapere, grazie ;)
mmx[ngg]
22-07-2004, 17:38
Mi sa ke devi riformulare la domanda in una lingua + umana :D
Io non c'ho capito nulla :confused:
GogetaSSJ
22-07-2004, 17:42
Sembra complicato ma non lo è :D
Cerco di spiegarmi meglio:
Ho una tavolozza di 10 colori su video, tutti diversi tra di loro.
A caso fornisco un colore, il quale dovrà essere comparato con i 10 della tavolozza. L'obbiettivo è quello di spostare il puntatore del mouse sul colore uguale. Ora è più chiaro?
La richiesta è un pò strana, però vorrei sapere se è fattibile e quindi imparare. Grazie ;)
GogetaSSJ
02-08-2004, 23:23
help me please
Potresti fare una scansione di tutti i pixel dell'immagine e verificare che il metodo Point della tua PictureBox ti ritorni il colore comparato..
GogetaSSJ
03-08-2004, 08:33
Oddio... ma la scansione dei pixel come la faccio? E' quello il tutto :(
Guarda l'esempio che ti ho fatto!! Converte il colore fucsia in giallo.. devi caricare l'immagine bmp in allegato :p
GogetaSSJ
03-08-2004, 20:17
Oddio è vero che sono novellino.. ma in quella codifica non ci capisco molto :cry:
Ho visto anche l'uso di hdc, ma ci ho capito poco e niente.
Non è che mi commentersti la codifica?
Almeno è un inizio, io dovrei fare una cosa molto + complessa.. spero di riuscirci :rolleyes:
Tranne per lo spostamente del mouse, nn mi sembra una così complessa cercare un colore corrispondente ad un altro dentro un immagine :)
Ecco i commenti
GogetaSSJ
03-08-2004, 20:53
Grazie infinite, ora ho capito come funziona il programma ;)
Comunque bè, rimane complesso xkè il programma si deve appoggiare ad un browser (firefox) e deve andare a scansionare un frame, nel quale le immagini cambiono dinamicamente.
Esempio
http://gogeta.interfree.it/frame html.gif
Deve prendere il colore di destra (magari il primo pixel in alto di quell'immagine) che in questo caso è il giallo, poi andarlo a confrontare con il primo fino all'ultimo, appena lo trova il puntatore deve cliccarlo.
La vedo dura :(
vai vai che è tutta esperienza :)
GogetaSSJ
03-08-2004, 21:35
Ma che dici è fattibile? Io non so proprio che fare :(
Spiegami il problema bene bene dall'inizio...
GogetaSSJ
03-08-2004, 22:21
Allora ricapitolando:
Ho una pagina html nella quale sono visualizzati questi 5 link (immagini)
http://gogeta.interfree.it/frame%20html.gif
Il programma deve riconoscere il colore del pulsante che sta a destra (il giallo) e andare a cliccare il colore corrispondente sulla sinistra (appunto il giallo)
I colori cambiano dinamicamente ad ogni click. E' una specie di giochino. Più che altro è una sfida oramai :D
Non so proprio come comportarmi :(
speedwago
03-08-2004, 22:59
a giudicare dalla signature e dal problema che esponi .... credo di aver capito che hai intenzione di macrare i click sulle pubblicita' :)
GogetaSSJ
03-08-2004, 23:01
Eheheeh bè non hai tutti i torti, cmq + che altro la mia è curiosità, sono davvero interessato a sapere come si fa.
Lavorare con le immagine nn è facile... cmq prova da solo, secondo me ci arrivi con dellos forzo, ma c'è la puoi fare :)
GogetaSSJ
03-08-2004, 23:40
Vabbè ci provo.... spero di riuscirci, intanto grazie per l'aiuto che mi hai dato, è già qualcosa ;)
I suggerimenti sono ben accetti ;)
Grazie!!
Prego Prego :p
Se ti rispondo è perchè nn sono in vacanza :oink:
GogetaSSJ
05-08-2004, 00:45
Credo di aver capito come operare, solo che non so adoperare l'handle.
In pratica dovrei ricavare l'handle di mozilla firefox ed assegnarlo a hDC. Facendo questo credo che farò un passo enorme in avanti.
Qualche delucidazione?
Grazie ;)
Io ti lascio ancora un po' di giorni per pensare, dai che secondo me ci stai arrivando!!!!! :)
GogetaSSJ
05-08-2004, 01:55
Eh ci arrivo ci arrivo.... ma come si usano questi handle? Non riesco a trovare documentazione per visual basic :(
Non riesco a dormire se non trovo na soluzione almeno a questo :P
Teoricamente se tu lanci qlc con SHELL ti ritorna l'handle che il sistema operativo ha assegnato al programma che hai aperto...
Vedi tu se ti può servire...
GogetaSSJ
05-08-2004, 11:01
Bè allora ti spiego il mio ragionamento:
In pratica io mi ricavo il valore WINWND con l'api findwindow, il quale dovrebbe identificare univocamente il programma in memoria (credo sia l'handle)
Ricavato questo, ho sostituito la variabile hDC, usata nell'esempio che mi hai fatto, con winwnd. Però qualcosa non torna.
Ho fatto una prova trovando l'handle del programma stesso, posiziono le coordinate X ed Y su un punto preciso dello schermo per prendere il colore rosso (background di una label) e faccio un controllo: mi esce una msgbox dicendomi se trova o meno il colore. Non me lo trova mai :(
Se non sono stato chiaro, posso postare uno screenshot del programma e la codifica. Confido nel tuo aiuto ;)
Non puoi fare così, perchè il valore che passi alla funzione è derivato solo da PictureBox o form e nn da programmi esterni..
Ti conviene fare lo shot dello schermo ed analizzare quello li :)
Provaci.. :p
GogetaSSJ
05-08-2004, 11:14
Uhmmmm intendi.... tramite il programmino fare lo shot della sua stessa finestra (magari con la combinazione di tasti ALT-STAMP), successivamente incollarla in qualche modo ad una picture box e poi lavorare su quella?
Dici che può funzionare?
Bhe il tuo programmino lancia il browser da quanto ho capito, li fai lo shot dello schermo (anche senza la combo di tasti), basta che fai qlc ricerca e vedi che si può fare anche da VB, se nn trovi nulla ti do una mano io... dopo di che analizzi la picture box :)
GogetaSSJ
05-08-2004, 12:52
Ok penso di aver capito il ragionamento. Mi metto all'opera e ti faccio sapere ;)
Io da domani pomeriggio parto per il week end con la tipa, per cui fino a lunedì nn credo di darti una mano :( , ma sai com'è.. se dico alla tipa: "Scusa, devo andare su internet a fare una cosa" e lei mi sta aspettando nn credo che sarebbe molto contenta? Tu nn credi? :oink:
heheheheheh
COsì quando torno vediamo i progressi :)
GogetaSSJ
05-08-2004, 16:29
Allora ho provato a smanettarci un pò, ora riesco a prendere la schermata tramite la combinazione di tasti ALT-TAB e poi la incollo nella picturebox.
Solo che non riesco a gestire bene le coordinate X e Y. Ho fatto varie prove (credo di averle azzeccate le coordinate nella picturebox) ma dopo il controllo, mi esce la msgbox nella quale mi avvisa che non trova il colore.
Ecco uno screen del programma e relativa codifica:
http://gogeta.interfree.it/Hwupgrade/theclicker.gif
Private Sub cmdverifica_Click()
Dim PicWidth As Long
Dim PicHeight As Long
Dim Y As Long
Dim X As Long
Dim Pixel As Long
Dim hDC As Long
Dim color As Long
X = 199
Y = 80
hDC = Picture1.hDC
PicWidth = Picture1.ScaleWidth
PicHeight = Picture1.ScaleHeight
Set Picture1.Picture = GetScreenBitmap(True)
color = RGB(255, 0, 0) 'imposto il colore da cercare (rosso)
txtcolore.Text = PicWidth & " " & PicWidth 'per verificare le coordinate
If GetPixel(hDC, X, Y) = color Then
MsgBox "ho trovato il colore"
Else
MsgBox "non ho trovato il colore"
End If
End Sub
'per grabbare lo schermo
Function GetScreenBitmap(Optional ActiveWindow As Boolean) As Picture
Dim pic As StdPicture
Set pic = Clipboard.GetData(vbCFBitmap)
If ActiveWindow Then
keybd_event vbKeyMenu, 0, 0, 0 'Preme ALT
End If
keybd_event vbKeySnapshot, 0, 0, 0 'Preme STAMP
DoEvents
keybd_event vbKeySnapshot, 0, KEYEVENTF_KEYUP, 0 'Rilascia STAMP
If ActiveWindow Then
keybd_event vbKeyMenu, 0, KEYEVENTF_KEYUP, 0 'Rilascia ALT
End If
DoEvents
Set GetScreenBitmap = Clipboard.GetData(vbCFBitmap)
End Function
Private Sub Form_Load()
Picture1.ScaleMode = vbPixels
Picture1.AutoRedraw = True
End Sub
Ps: da notare nello screen che il colore rosso "grabbato" non è del tutto uguale, forse per quello non lo trova. Oppure è la mia impressione, boh.
Ti mando un esempio per catturare da codice una schermata, puoi anche selezionare tu le dimensioni da prendere! Forse è un po' + utile di alt e stamp no?
Questo è l'ultimo che ti mando, a lunedì.. spero che il week end ti porti consiglio!
GogetaSSJ
05-08-2004, 21:56
Non so come ringraziarti, davvero sei molto disponibile. Appena ho un pò di tempo analizzo il tuo codice e posto i miei progressi.
Grazie ancora!!!!!
GogetaSSJ
29-08-2004, 22:01
Come preannunciato nell'altro thread volevo dire che ho trovato un'altra soluzione, che credo sia migliore, al mio problema.
Al posto di usare una picturebox e tutto il resto, prendo l'hwnd dell'intero desktop e con GetWindowDC scatto una sorta di screenshot, successivamente procedo con la prelevazione del colore del pixel e confronto.
Insomma una soluzione molto + semplice grazie a GetWindowDC, il problema è che prima non conoscevo questa funzione, verte tutto sulla conoscenza :D
Spero possa essere utile anche ad altri ;)
hehehe sisi è la soluzione!
Visto che anche sta volta c'è l'abbiamo fatta...
bhe meglio dire... c'è l'hai fatta :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.