1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

C++ Farbe ermitteln

Discussion in 'Programmieren' started by christophkrner, Aug 31, 2009.

Thread Status:
Not open for further replies.
  1. Also ich hab mir da so was zusammenprogrammiert. Es soll bei bestimmten Punkten (pixel) eine Farbe überprüfen.

    Ein Beispiel hätte ich für euch:

    Suche mir bei Pixel 200,500 die Farbe und überprüfe sie mit a4786f. Sollte es diese sein, speichere es als Zahl im Arbeitsspeicher. Die Zahl ist 6.

    Mein Versuch:

    COLORREF c = GetPixel(dc, 200, 500);
    string farbwert = "" + GetRValue(c) + GetGValue(c) + GetBValue(c);
    ReleaseDC(0, dc);

    Eine Bitte zu Beginn: Bitte postet den kompletten Code immer, das ist übersichtlicher!

    Außerdem ist das mein erster Versuch und logischerweise auch mein Programmanfang (außer das Design, dass nicht besonders ist ;-) )
     
  2. kazhar

    kazhar Viertel Gigabyte

    wenn du dir vorher noch den device context lädst funktionierts auch.
    dc=GetDC(0);

    nachdem du den kompletten code haben willst und die sprache nicht spezifiziert hast: ;)
    Code:
    Program GetPixel;
    uses WindowTools, Windows, VpSysLow;
    
    Procedure Error(EStr: string);
    begin
         writeln(EStr);
         writeln;
         Halt(1);
    end;
    
    var s: string;
        x, y, hv: dWord;
        hWin: hWnd;
        rect: TRect;
        DC: hDC;
        Color: tColorRef;
        ColorRGB: array[0..3] of byte absolute Color;
    
    begin
         if ParamCount < 3 then
              Error('Fehler: zu wenige Parameter'+#13+#10+
                    '  Syntax: GetPixel <x-Koordinate> <y-Koordinate> <Fenstertitel>');
    
         s:=ParamStr(1);
         val(s, x, hv);
         if hv <> 0 then
              Error('Fehler: kein g&#252;ltiger Wert f&#252;r x-Koordinate');
    
         s:=ParamStr(2);
         val(s, y, hv);
         if hv <> 0 then
              Error('Fehler: kein g&#252;ltiger Wert f&#252;r y-Koordinate');
    
         s:='';
         for hv:=3 to ParamCount do
         begin
              s:=s + ' ' + ParamStr(hv);
         end;
    
         delete(s, 1, 1);
    
         if s[1]='$' then
         begin
              delete(s, 1, 1);
              val(s, hwin, hv);
              if hv <> 0 then
                   hwin:=0;
         end else begin
              s:=s+#0;
              hWin:=GetWindowHandle_ByName(0, @s[1]);
         end;
    
         if hWin = 0 then
         begin
              writeln('Kein Fenster mit dem angegebenen Titel gefunden, verwende den Desktop');
              hWin:=GetDesktopWindow;
         end;
         writeln('Fensterhandle: ', hwin);
    
         repeat
              GetWindowRect(hWin, rect);
              DC:=GetDC(0);
              Color:=Windows.GetPixel(DC, rect.left + x, rect.top + y);
              ReleaseDC(0, DC);
    
              if Color = -1 then
                   writeln('Farbe kann nicht ermittelt werden (nicht sichtbares Pixel?)')
              else
                   writeln('R: ', Byte2Hex(ColorRGB[0]), ', G: ', Byte2Hex(ColorRGB[1]), ', B: ', Byte2Hex(ColorRGB[2]));
    
              Sleep(1000);
         until false;
    end.
    
     
Thread Status:
Not open for further replies.

Share This Page