Ich mache ein Programm, das Bilder beschneidet. Ich habe zwei PictureBoxes
und einen Button namens 'crop'. Ein Bildfeld enthält ein Bild. Wenn ich ein Rechteck auswähle und auf "Zuschneiden" drücke, wird der ausgewählte Bereich im anderen Bildfeld angezeigt. Das Programm funktioniert also, wenn ich auf "Crop" drücke. Das Problem ist: Wie kann ich das Bild aus dem Bildausschnitt in Bildbox Bild bekommen?
Das Problem ist, dass x = null und das Bild in der Bildbox angezeigt wird, also wie kann ich das Bild aus dieser Bildbox in die Variable Image
bringen?
Ein paar Probleme:
PictureBox.Image
(eine Eigenschaft) und der Graphics
, die Sie mit der PictureBox
-Oberfläche verknüpfen.
Das Objekt Graphics
, das Sie von Control.CreateGraphics
erhalten, kann nur auf die Oberfläche des Steuerelements malen. normalerweise nicht was du willst; Und selbst wenn Sie dies tun, möchten Sie dies normalerweise in einem Paint
-Ereignis mit e.Graphics
.. Während also Ihr Code funktioniert , werden nur nicht dauerhafte Pixel auf die Oberfläche gemalt. Minimiere / maximiere und du wirst sehen, was nicht persistent bedeutet ..!
Um ein Bitmap
bmp zu ändern, müssen Sie es mit einem Grahics
-Objekt wie folgt verbinden:
Jetzt können Sie hinein zeichnen:
%Vor% Danach können Sie Bitmap
der Image
Eigenschaft von TargetPicBox
..
Schließe die Graphics
ab, oder besser, lege sie in eine using
-Klausel.
Ich gehe davon aus, dass es Ihnen gelungen ist, den rectCropArea
sinnvolle Werte zu geben.
Beachten Sie auch, dass die Art und Weise, wie Sie die Quell-Bitmap kopieren, einen Fehler enthält: Wenn Sie das vollständige Bild verwenden möchten, verwenden Sie sein Size
(*), nicht das von PictureBox
!!
Und anstatt ein Zielrechteck mit demselben Fehler zu erstellen, verwenden Sie einfach TargetPicBox.ClientRectangle
!
Hier ist ein Beispielcode für die Zuschneide-Schaltfläche:
%Vor% Beachten Sie, dass ich, da ich targetBitmap
zu TargetPicBox.Image
zuweisen muss, nicht dipose! Bevor ich ein neues Image
erstelle, gebe ich zuerst Dispose
das alte ein ..
Tags und Links c# winforms system.drawing