Wie bekomme ich ein Bild von einem Rechteck?

8

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?

%Vor%

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?

    
user3742682 01.05.2015, 08:25
quelle

1 Antwort

3

Ein paar Probleme:

  • Zuerst und am wichtigsten: Sie sind verwirrt über die Beziehung zwischen 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 ..
  • tun

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:

%Vor%

Jetzt können Sie hinein zeichnen:

%Vor%

Danach können Sie Bitmap der Image Eigenschaft von TargetPicBox ..

zuweisen

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%
  • Natürlich sollten Sie das Rectangle in den richtigen Mausereignissen vorbereitet haben!
  • Hier würden Sie sich für das Seitenverhältnis des Ergebnisses entscheiden; Sie wollen das Ergebnis wahrscheinlich nicht verzerren! Sie müssen also entscheiden, ob Sie das Quell-Beschnittrahmenrechteck beschneiden oder das Zielrechteck erweitern möchten.!

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 ..

    
TaW 01.05.2015, 09:19
quelle

Tags und Links