Thread Pixelfarbe von Display ermitteln... (7 answers)
Opened by rommi at 2008-08-10 22:27

rommi
 2008-08-11 19:30
#113364 #113364
User since
2005-03-03
54 Artikel
BenutzerIn
[default_avatar]
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! ----

View full thread Pixelfarbe von Display ermitteln...