C# Fadenkreuz in einem Bild?
Hallo Community, folgendes Problem, ich habe in einer Bitmap zwei Linien gezogen, so das ein Fadenkreuz genau in der Mitte des Bildes steht. Jetzt möchte ich das Fadenkreuz bewegen. Wenn ich aber die Resolution ändere auf weniger Pixel ist das Fadenkreuz nicht mehr in der Mitte? Habe ich irgendwie was falsch gemacht?
1 Antwort
Genau. Es ist nicht in der Mitte, weil es nun mal eine feste Größe hat und du es damit einfach abschneidest. Probiere es mal mit:
Damit wird das Bild so resized, dass es nicht einfach abgeschnitten wird, sondern der Inhalt sich auch anpasst
"g" steht hier für das Graphics Object
Ein einfacher resize, wie du den machst, der sollte so funktionieren:
Das Orangene ist das Fadenkreuz. Grün ist die aktuelle Größe, als es gezeichnet wurde und Rot ist die Größe, als es skaliert wurde, mit width und height. Deshalb am besten einmal den Bitmap Konstruktor damit aufrufen und eine neue Größe mitgeben. Dieser sollte das dann automatisch neu berechnen, sodass auch der Inhalt an der Frame des Bildes passt


Wenn du die Position änderst auf die width, so wie du es beschreibst, dann ist x auf width und somit außerhalb des Bereichs. Bei height genau so. width ist doch dann schon das maximum an position
Du verstehst mich falsch. Im Bild siehst du den Code. Da ist Vertical eine zusätzlich Eigenschaft und Horizontal eine Eigenschaft. Diese haben nur den Sinn, dass man das Fadenkreuz durch das Additionsverfahren nach oben und unten sowie rechts und links verschieben kann. Problem ist aber doch jetzt wenn das Bild kleiner ist, dann wird die Eigenschaft Vertical und Horizontal gleich bleiben und somit ist das Fadenkreuz wieder verzogen. Irgendwie die Idee wie ich das Berechne?
Wenn du das Bild verkleinerst, tust du das doch nach der änderung der Position oder? Dann sollte automatisch das Pfadenkreuz mit resized werden. Deshalb nutzt du ja den ctor und nicht width und height
Das Fadenkreuz wird permanent neu gezeichnet. Ich nehme die Bilder von einer Webcam. Daher die Resolutionsänderung und etc. Also jedes mal wird das Fadenkreuz pro Frame neu gezeichnet. Wenn jetzt aber die Resolution geändert wird und das Fadenkreuz ist verschoben, dann ist nicht auf dem gleichen Punkt, wie bei der anderen Resolution.
Du nutzt auch den ctor dafür? Hast du vielleicht mal ein Beispiel oder so, wo man genau sieht, was passiert?
Ey keine Ahnung wie das funktionieren soll. Ich will doch nur zwei Linien verschieben und die sollen immer an der gleichen Stelle stehen, wenn das Bild sich von der Pixelanzahl ändert. Aber das funktioniert einfach nicht
Achso, meintest du, dass die sich verschieben sollen, wenn das Bild schon klein ist? Dann musst du halt die Position width & height auch berechnen, die du zum umpositionieren
Ja aber wie berechnet man das denn? Ich hätte ja gesagt den alten - durch die neue Resolution. Aber dann ist das wieder zu viel.
Danke du hast recht gehabt. Man muss die neue Größe in dem Konstruktor mit angeben. Bescheuerter hätte man es nicht machen können. Warum zur Hölle macht man nicht eine Methode keine Ahnung Resize oder sowas
Das Bild muss komplett neu erstellt werden. Einfach verkleinern ist da nicht. Deshalb wird ein neuer Konstruktor benutzt, da es neu muss. Du kannst es aber für dich auslagern. Als ich viel mit Bitmaps und Graphics Objekten arbeiten musste, habe ich mir dafür extra eine kleine DLL geschrieben, die ich extern pflegen konnte und somit immer die besten Methoden bereitgestellt hatte. Muss nicht zwingend eine DLL sein, kann auch eine extra Klasse in neuer Datei sein. Ich hatte mich nur für eine DLL entschieden gehabt
Kann das sein das ich noch irgendwie die Differenz berechnen muss?
Dennoch gibt es ein Problem. Und zwar habe ich Width und Height als Variablen zur Positionsverschiebung angelegt. Wenn ich jetzt das Kreuz verschiebe und die Resolution ändere. Ist es immer noch nicht dort, wo es bei der anderen Resolution stand?