Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi rgb farbinformationen vom desktop bekommen (https://www.delphipraxis.net/21905-rgb-farbinformationen-vom-desktop-bekommen.html)

KoRn117 9. Mai 2004 20:09


rgb farbinformationen vom desktop bekommen
 
hallo,



ich habe ein programm programmiert, was von dem desktop einen screenshot macht und dann per
Delphi-Quellcode:
color := bitmap.Canvas.Pixels[x,y];
die farbe bestimmen.

dann bestimme ich mit dieser (aus der delphipraxis geklauten) function die rgb werte:

Delphi-Quellcode:
TColor2RGB(color,r,g,b);


procedure TColor2RGB(const Color: TColor; var R, G, B: Byte);
begin
  // convert hexa-decimal values to RGB
  R := Color and $FF;
  G := (Color shr 8) and $FF;
  B := (Color shr 16) and $FF;
end;
nun habe ich meine r g b - werte, das problem von meinem programm ist, dass es irgendwie abschmiert (ich denke es liegt an dem screenshot machen). egal, interessiert mich nciht mehr, ich habe jetzt den farbwert eines pixels auf dem desktop mit dieser (auch geklauten) funktion bekommen.
Delphi-Quellcode:

function GetPixel(Pos: TPoint): TColor;
var
  DC: HDC;
  Handle: HWND;
begin
  Handle:=WindowFromPoint(Pos);
  DC:=GetDC(Handle);
  result:=Windows.GetPixel(DC, Pos.X, Pos.Y);
  ReleaseDC(Handle, DC);
end;
das problem dabei ist, dass ich einen blau-ton habe und wenn ich die von getpixel zurückgelieferte farbe aufspalten in die 3 rgb-werte kommt sowas raus wie: R=0; G=0; B=234;
das kann aber nicht sein, weil psp8 mir z.b. über diesen pixel aussagt, das er R=29; G=144; B=189 hat. ich kapier das nicht :|

könnt ihr mir bitte helfen?

vielen dank!

korn117

KoRn117 9. Mai 2004 20:11

Re: rgb farbinformationen vom desktop bekommen
 
sorry, nochmal eine kleine erklärung:

mein programm soll folgendes machen:

von einem pixel, den der user sieht die drei einzelnen farbwerte auslesen.

das war's eigentlich :-D


am besten OHNE screenshot!

hab schon wirklich das dp-forum durchsucht!(sieht man ja an den funktionen)

Tryer 9. Mai 2004 20:42

Re: rgb farbinformationen vom desktop bekommen
 
Über GetDC(0) bekommst Du Zugriff auf den gesamten Bildschirm und brauchst nicht extra das Fenster an der Stelle ermitteln.
Zudem haben dann die Koordinaten von Pixel und Desktop den gleichen Bezug. GetPixel bezieht sich afaik auf die Koordinaten des DC, und der wäre bei anderen Fenstern ja offsetbehaftet (-> GetDCOrgEx()).
Beim Release gibst Du dann das eigene Fensterhandle an.

MfG,
Tryer

KoRn117 9. Mai 2004 21:02

Re: rgb farbinformationen vom desktop bekommen
 
hi tryer!

danke für deine antwort ich werde, aber daraus nciht so (komplett) schlau, es wäre nett, wenn du es für mich noch mal etwas anders formulierst :)

(den code habe ich ja nicht geschrieben, ich verstehe ihn nicht komplett bis ins letzte detail, was da so vor sich gehen soll :roll: )

vielen dank!

KoRn117 9. Mai 2004 21:12

Re: rgb farbinformationen vom desktop bekommen
 
ich hab die eine funktion zur bestimmung des der pixelfarbe mir nochmal angeguckt und sie so verändert, dass da nur noch eine zeile sourcecode ist:


Delphi-Quellcode:

function GetPixel(Pos: TPoint): TColor;
var
  DC: HDC;
//  Handle: HWND;
begin
//  Handle:=WindowFromPoint(Pos);
//  DC:=GetDC(Handle);
//  result:=Windows.GetPixel(DC, Pos.X, Pos.Y);
result:=Windows.GetPixel(GetDC(0), Pos.X, Pos.Y);
//  ReleaseDC(Handle, DC);
end;
nun hab ich eine vermutung: des getpixel ermittelt meiner meinung nach nur den farbton für rot und nicht alle rgb farbwerte .

stimmt meine vermutung??? :roll: - und wenn ja könnt ihr mir bitte helfen?

danke!

teebee 10. Mai 2004 13:14

Re: rgb farbinformationen vom desktop bekommen
 
Zitat:

Zitat von KoRn117
ich hab die eine funktion zur bestimmung des der pixelfarbe mir nochmal angeguckt und sie so verändert, dass da nur noch eine zeile sourcecode ist:


Delphi-Quellcode:

function GetPixel(Pos: TPoint): TColor;
var
  DC: HDC;
//  Handle: HWND;
begin
//  Handle:=WindowFromPoint(Pos);
//  DC:=GetDC(Handle);
//  result:=Windows.GetPixel(DC, Pos.X, Pos.Y);
result:=Windows.GetPixel(GetDC(0), Pos.X, Pos.Y);
//  ReleaseDC(Handle, DC);
end;

Du solltest das nicht auf eine Zeile zusammenkürzen sondern den Gerätekontext ('DC') auf jeden Fall zwischenspeichern, um ihn hinterher mit ReleaseDC freizugeben.

Zitat:

Zitat von KoRn117
nun hab ich eine vermutung: des getpixel ermittelt meiner meinung nach nur den farbton für rot und nicht alle rgb farbwerte .

stimmt meine vermutung??? :roll:

Nein, GetPixel liefert den RGB-Wert des entsprechenden Pixels (s. PSDK).
Stimmen Deine Koordinaten denn ganz sicher?

Gruß, teebee

KoRn117 12. Mai 2004 21:36

Re: rgb farbinformationen vom desktop bekommen
 
ich bin mir fast 100%ig sicher - leider. aber wenn ich mit der obengenannten funktion die rückgabe von getpixel aufteilen will in r-g-b dann kommt bei meinen test's bei g & b "0" raus :?

danke für deine antwort teebee

Rollo62 18. Aug 2015 07:34

AW: rgb farbinformationen vom desktop bekommen
 
...


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz