Hallo Leute!
Ich habe ein großes Problem. Und zwar möchte ich mir die Farbe eines angeklickten Pixels (über MouseDown-Event) in einer Bitmap wiedergeben lassen.
Das Problem daran ist, dass die PictureBox, wo das Bild reingeladen ist über den StretchMode läuft, damit das ganze Bild angezeigt wird. D.h. der angelickte Pixel im Bild stimmt mit dem Orginalbild nicht überein. Weil das Bild entweder gestaucht oder gestreckt wurde.
Nun meine Frage an euch, ob ihr vielleicht eine Idee habt? Mir fällt einfach nichts ein.
Codebeispiel:
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
Point p;
Color Farbe;
p = PointToClient(Control.MousePosition);
Farbe = BMP.GetPixel(p.X, p.Y);
}
MFG neonice
als erstes musst du den faktor um das deine pitmap gestreched wurde, berechnen. dann wendest du diesen faktor auf die mouseposition aus den eventargs an. anschließend holst du den pixel mit getpixel aus dem bitmap heraus.
ps: eine gewisse ungenauigkeit bleibt trotzdem bestehen.
was dich evtl noch interessieren dürfte:GetPixel und SetPixel um Längen geschlagen. 800 mal schneller
Hol dir doch mit Win API GDI BitBlit das Bitmap des verwendeten Handels also z.B. deines Form oder der Picturebox ab und berechne von dort aus die Pixel. Somit musst nicht umrechnen.
Kannst das ganze auch mit nur .NET Mittel angehen indem einfach nen Screenshoot deiner Form bzw. Picturebox machst und von dort wiederum die Mauskoordinaten auf das Bildumrechnest um so dann vom verzeerten Bild dne Pixel zu bekommen.
Wie Screenshoots machst findest über die Suche hier im Forum.
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
Ich bedanke mich erstmal für eure Hilfe. Ich versuche es mit euren Ansätzen hinzubekommen.