Thread Pixelfarbe von Display ermitteln...
(7 answers)
Opened by rommi at 2008-08-10 22:27
Hallo Perlfans,
sorry habe gestern echt meinen Beitrag etwas schnell schnell reingeklopft ohne genau zu erklären was ich will :-( Das doppelte Posting sollte niemand verärgern aber man hat halt einfach mehr Resonanz u. mehr Lösungen (gerade in Perl) und manchmal einen Zeitvorteil. Aber nachdem ja viele Ratgeber in verschiedenen Perlforen tätig sind ist es natürlich auch nicht unentdeckt geblieben. BB is watching u .. lol. Sollt ich es wieder einmal übersehen (ich poste eher selten) dann nicht gleich Kopf- abreiss (aua aua). Werd hoffentlich das nächstemal dran denken einen Hinweis zu geben oder bis zu meiner nächsten Frage sind alle wichtigen Perlforen zu einem ÜberMegaPerlHilfeForum (ÜMPHF) zusammen geschaltet :-)) Zu meinem Problem: Ziel ist es den Farbwert eines beliebigen Pixels auf meinen Desktop zu ermittlen und genau diesen Farbwert später als Pixel mit dem selben Farb- wert in ein Bild einzufügen. Ich nehme mal als Beispiel die Pixelfarbe der Koordinate 1,1 von meinem Desktop (Programmierstil habe ich jetzt nicht be- achtet). use Image::Magick; use Win32::GUI; $screen = new Win32::GUI::DC("DISPLAY"); $pixfarb = $screen -> GetPixel (1, 1); ## Inhalt von $pixfarb ist jetzt "10841658". Die Zahl "10841658" ist ## das Äquivalent zum Hex-Wert #3A6EA5 bzw. RGB-Wert 58,110,165. Die ## Leider kann ich die Zahl "10841658" in späteren Befehlen nicht dir- ## ekt verwenden sondern muss die Zahl vorher in einen Hexwert oder ## für andere Funktionen in einen RGB-Wert umwandeln. $pixfarbhex = sprintf("#%X", $pixfarb); ## Inhalt von $pixfarbhex ist jetzt "#A56E3A". Da ist aber dann schon ## ein Dreher drin denn eigentlich sollte der äquivalente Hexfarbwert ## "#3A6EA5" sein!! ## Der Hexwert "#A56E3A" ist aber eine ganz andere Farbe als der Hex- ## wert "#3A6EA5". Ganz krass ist es z.B. bei dem Wert "12643" (ist ## ne ziemlich dunkle braune Farbe). Wenn ich diesen Wert "12643" in ## eine Hexzahl wandle kommt "#3163" raus. Der äquivalente Hexfarbwert ## für "12643" ist aber "#633100" und nicht "#3163". Das ist eine völlig ## andere Farbe!! Also schon bei der Umwandlung in eine Hexzahl habe ich ## Probleme. Auch die Nullen werden bei der Umwandlung nicht dargestellt. $image = Image::Magick->new; $image->Set(size=>"200x200"); $image->ReadImage('xc:white'); $image->Set("pixel[5,8]"=>"$pixelfarbhex"); # ich füge hier ein Pixel # mit dem ermittelten Farb- # wert ein. ## In diesem Befehl wird halt ein Hexwert erwartet. D.h. ich kann den ## Wert aus $pixfarb "10841658" hier nicht direkt verarbeiten sondern ## benötige einen Hexwert. Und wie ich es schon erwähnte habe ich Prob- ## leme mit der Umwandlung sodass ich den entsprechend richtigen Hexwert ## habe. $pic1 = $image->Write('C:\Verzeichnisxy\name.gif'); # Bild abspeichern Also am Besten wäre es den Wert aus $pixfarbhex direkt (ohne Hexumwandlung) weiterverarbeiten zu können oder wenigstens eine sichere Umwandlung in den entsprechenden richtigen Hexwert zu realisieren. Vielleicht gibt es ja auch einen ganz andere Lösungsansatz? Vielleicht kann man auch irgendwie mit RGB- Werten arbeiten? An Struppi: @pixfarb enthält den gleichen Wert wie wenn ich $pixwert nehmen! gruss, rommie --- Offene Systeme könenn ja nicht ganz "dicht" sein! ---- |