Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Farbe unter dem Mauszeiger erkennen (https://www.delphipraxis.net/38683-farbe-unter-dem-mauszeiger-erkennen.html)

Neuni 22. Jan 2005 19:47


Farbe unter dem Mauszeiger erkennen
 
Hi,
gibt es eine möglichkeit auf einem Bild die Farbe (als RGB) die unter dem Mauszeiger ist herauszufinden? Also ich habe in meinem Programm ein Bild und möchte dann die Farbe als RGB auslesen, die gerade unter dem Cursor ist.

Ist das möglich und wenn ja wie?

Muetze1 22. Jan 2005 20:23

Re: Farbe unter dem Mauszeiger erkennen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin!

Ich habe mal mein IHK Abschlussprojekt angehängt, der kann sowas mit Bitmaps - einfach mal anschauen, ich hoffe damit kommen dir die nötigen Ideen.

Ansonsten zu dem TColorSelector: er nutzt noch einen alten Revisionsstand, ich habe aber die neueste Version der Komponente beigelegt - es können Fehler beim Compilieren auftreten - sollten aber IMHO nicht.

MfG
Muetze1

Elite 22. Jan 2005 21:25

Re: Farbe unter dem Mauszeiger erkennen
 
Mag sein, dass das gleiche auch in deinem Projekt drinne steht (umso besser), denn ich weiß es nur noch teilweise.
Es gibt tatsächlich ne API, mit der du die Pixelfarbe an einem bestimmten, globalen Punkt bekommst. Mit GetCursorPos holst du dir diesen Punkt und mit GetColor(GetCursorPos) o.Ä. (weiß leider nimmer wie das Teil genau hieß) holst du dir dann die Farbe.

Bitworm 22. Jan 2005 23:14

Re: Farbe unter dem Mauszeiger erkennen
 
Gibt es denn da keinen Lösungsansatz, der in ähnlicher Art bereits im Bereich Win32-API (da gehört das Ganze IMHO eher hin) diskutiert wurde ?

Dani 22. Jan 2005 23:14

Re: Farbe unter dem Mauszeiger erkennen
 
Zitat:

Windows GDI
GetPixel
The GetPixel function retrieves the red, green, blue (RGB) color value of the pixel at the specified coordinates.

COLORREF GetPixel(
HDC hdc, // handle to DC
int nXPos, // x-coordinate of pixel
int nYPos // y-coordinate of pixel
);
Parameters
hdc
[in] Handle to the device context.
nXPos
[in] Specifies the x-coordinate, in logical units, of the pixel to be examined.
nYPos
[in] Specifies the y-coordinate, in logical units, of the pixel to be examined.
Return Values
The return value is the RGB value of the pixel. If the pixel is outside of the current clipping region, the return value is CLR_INVALID.

Remarks
The pixel must be within the boundaries of the current clipping region.

Not all devices support GetPixel. An application should call GetDeviceCaps to determine whether a specified device supports this function.

Requirements
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.
Header: Declared in Wingdi.h; include Windows.h.
Library: Use Gdi32.lib.


Nikolas 22. Jan 2005 23:23

Re: Farbe unter dem Mauszeiger erkennen
 
Alternativ gibt's auch die einfache Eigenschaft Pixel von TCancas, die als Funtkion dazu genutzt werden kann, als Rückgabe den Farbwert des übergeben Pixels zu liefern. Das sollte das einfachst sein.

TStringlist 23. Jan 2005 00:11

Re: Farbe unter dem Mauszeiger erkennen
 
Hier nochmal eine nette kurze Lösung mittels GetPixel:


Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var DC : HDC;
    AColor : DWord;
begin
  DC:=CreateDC('DISPLAY',NIL,NIL,NIL);
  AColor := GetPixel(DC,Mouse.CursorPos.X,Mouse.CursorPos.Y);
  DeleteDC(DC);
  Label1.Caption := 'R: ' + IntToStr(AColor and $FF) + ';  ' +
                    'G: ' + IntToStr(AColor and $FF00 div $100) + ';  ' +
                    'B: ' + IntToStr(AColor and $FF0000 div $10000);
end;

Muetze1 23. Jan 2005 00:53

Re: Farbe unter dem Mauszeiger erkennen
 
Moin!

Div? Warum nicht einfach Shr ?

Ansonsten nochmal was anderes: Oben wurde nach dem Pixel in einem Bild gefragt, daher sind so gut wie alle Lösungen nur über Anpassungen nutzbar...

MfG
Muetze1

TStringlist 23. Jan 2005 04:34

Re: Farbe unter dem Mauszeiger erkennen
 
Moin, Moin

Klar Shr, dürfte ja auch eine ganze Stange schneller sein. (Die Ecke war mir da im Moment aber auch gar nicht so wichtig.)

...das Bild, über welchem er aber immer mit dem Cursor drüber ist! Die Ergebnismenge ist also eher größer als notwendig gewesen ...und sollte event. jetzt nur auf das Bild reduziert werden? Z.B. so:

Delphi-Quellcode:
  with Mouse, Image1 do
  if (CursorPos.X < ClientOrigin.X) or (CursorPos.X >= ClientOrigin.X + Width)
  or (CursorPos.Y < ClientOrigin.Y) or (CursorPos.Y >= ClientOrigin.Y + Height)
  then Label1.Caption := ''
  else begin
    .
    .
    .
  end;

Neuni 4. Feb 2005 12:53

Re: Farbe unter dem Mauszeiger erkennen
 
So, das geht ja schon wunderbar, aber:
Kann ich das ganzeauch in Hex ausgeben lassen statt RGB? Wenn ja: Wie?

Edit: Habs schon selber hinbekommen, trotzdem danke :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 Uhr.
Seite 1 von 2  1 2      

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