scherm/bitmap "scannen" op bepaalde kleur pixel(s)

Status
Niet open voor verdere reacties.

sander the man

Gebruiker
Lid geworden
7 jun 2007
Berichten
94
hoe kan ik met C++ het scherm laten "scannen" op bepaalde kleuren van pixels? bijv. ik zeg dat hij een bep. RGB kleur moet zoeken op het scherm dan scant hij `t scherm en dan moet hij de x,y posities geven van `t de pixel met die kleur.

edit:

ik heb ff wat gerommeld en gegoogled toen kwam ik op de Getpixel() functie uit en ik zag een paar voorbeelden en toen ben ik gaan knutsellen en dit kwam er uit:
Code:
#include <windows.h>
export double __pixel(int beginx,int beginy,int endx,int endy  ,BYTE red, BYTE green, BYTE blue)
{
       int looping=1;
       int xx=beginx;
       int yy=beginy;
       if(xx>endx)
       {
       xx=beginx;   
       yy=yy+3      
       }
else
{
xx=xx+3
}
       if(yy>endy)
       {
       xx=beginx
       yy=beginy
       }
    using namespace std;
    HWND subWindow = FindWindow(NULL, TEXT("Dev-C++"));
    SetForegroundWindow(subWindow);
    HDC hdc = GetDC(subWindow);
    while(looping=1)
    {
    COLORREF color = GetPixel(hdc, xx, yy); 
    BYTE redValue, greenValue, blueValue;
    redValue = GetRValue(color); 
    greenValue = GetGValue(color); 
    blueValue = GetBValue(color);
    if(redValue==red)
    {
                     if(greenValue==green)
                     {
                                          if(blueValue==blue)
                                          {
                                          looping=0;
                                          }
                     }
    }
    }
}

maar ik weet niet zeker of hij `t doet maar denk `t niet...... en..... als al die kleuren juist zijn dan staat er looping=0 dat klopt maar dan zou ik de xx en yy ook moeten return.... maar hoe doe ik dat? want ik kan geen nieuwe functie maken omdat het een dll is...... en ik zou ook geen 2 functies kunnen maken met 1 xx en 1 yy want ze moeten samen werken......
 
Laatst bewerkt:
De waarde van xx en yy zijn in jouw loop constant en de loop doet waarschijnlijk niet wat je wil.

De punten (x,y) kan je teruggeven met behulp van een array van POINT (of met een vector).
Hieronder wat aanpassingen aan je code. Overigens heb ik de code niet getest.
De functie geeft het aantal gevonden punten terug.
Code:
#include <windows.h>

export int __pixel(int beginx,int beginy,int endx,int endy  ,BYTE red, BYTE green, BYTE blue, POINT p[],int arraylen)
{
 int n;
 int xx,yy;

 HWND subWindow = FindWindow(NULL, TEXT("Dev-C++"));
 SetForegroundWindow(subWindow);
 HDC hdc = GetDC(subWindow);

 n = 0;
 for( yy = beginy ; yy < endy ; yy++ )
    for( xx = beginx ; xx < endx ; xx++ )
    {
        COLORREF color = GetPixel(hdc, xx, yy);
        BYTE redValue, greenValue, blueValue;
        redValue   = GetRValue(color);
        greenValue = GetGValue(color);
        blueValue  = GetBValue(color);
        if(redValue==red)
        {
             if(greenValue==green)
             {
                 if(blueValue==blue)
                 {
                      if( n < arraylen )
                      {
                          p[n].x = xx;
                          p[n].y = yy;
                          n++;
                      }
                 }
             }
        }
    }

 ReleaseDC(subWindow,hdc);
 return n;
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan