Lister pixels couleur spécifique : GetPixel

Résolu
irvine31 Messages postés 23 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 28 juin 2012 - 27 juin 2012 à 21:24
irvine31 Messages postés 23 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 28 juin 2012 - 28 juin 2012 à 10:57
Bonjour,
J'ai découvert une API qui peut m’être très utile : GetPixel.
J'ai fait pas mal de recherche et j'en suis venu à ceci :

Public Class Form1
    Public Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As IntPtr, ByVal x As Integer, ByVal y As Integer) As IntPtr
    Public Declare Function GetWindowDC Lib "user32.dll" (ByVal hwnd As IntPtr) As IntPtr

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        For Each Personnage In Process.GetProcessesByName("Procecus")
            Dim cacao As IntPtr = GetWindowDC(Personnage.MainWindowHandle)
            TextBox1.Text = GetPixel(cacao, Cursor.Position.X, Cursor.Position.Y).ToString
        Next
    End Sub
End Class


Tout fonctionne à merveille !
Mais j'aimerais lister toute les positions où les pixels ont une couleur spécifique.
Concrètement, j'aimerais avoir les positions (X et Y) dans la fenêtre où les pixels ont cette valeurs : "15527405".

Voici ma question :
Est-ce que je suis obligé de tester la valeur de chacun des pixels un par un pour effectuer la liste ou existe-il une solution plus simple ?
Par exemple si il existait une API ("FindPixel" pour handle spécifique) se serait super !
Le problème c'est que la fonction va être répété extrêmement rapidement donc j'ai peur que cela prenne beaucoup de ressource ...
Donnez-moi votre point de vue s'il vous plait.
Bonne soirée à tous !

4 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
27 juin 2012 à 23:04
Bonjour,

Non, je ne pense pas que ça existe, il faudra que tu fasse la boucle pour contrôler tout les pixels.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
28 juin 2012 à 10:11
Bonjour,
mais si quelqu'un d'autre à une astuce je suis preneur

Il n'en existe pas. Je plussoie ce que t'en a dit NHenry.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
3
irvine31 Messages postés 23 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 28 juin 2012
28 juin 2012 à 09:46
Merci pour ta réponse, je vais faire ceci mais si quelqu'un d'autre à une astuce je suis preneur
0
irvine31 Messages postés 23 Date d'inscription samedi 10 avril 2010 Statut Membre Dernière intervention 28 juin 2012
28 juin 2012 à 10:57
Bon, je vais faire comme ça
Sujet résolu, merci à vous deux !
0
Rejoignez-nous