Wie kann man auf einer gezoomten Bitmap zeichnen?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Wie kann man auf einer gezoomten Bitmap zeichnen?

    Guten Abend,

    ich dachte an etwas einfaches, und wollte ein kleines Paint Programm erschaffen, wo 32x32 oder 64x64 Grafiken bearbeitet und gespeichert werden können. Nun ja, hilfreich sind solche Grafiken z.B. für Minecraft, wenn man ein Ressourcepack erstellen möchte.

    Nur bin ich echt am verzweifeln. Ich habe überall recherchiert und keine Lösung für mein Problem gefunden, generell findet man sehr wenig im Internet zu Zeichnungsprogrammen.

    Quellcode

    1. Public Class Form2
    2. Dim BMP As Bitmap = Nothing
    3. Dim NewBMP As Bitmap = Nothing
    4. Dim scaleFactor As Integer = 16
    5. Dim g As Graphics
    6. Dim CurrentColor As Color = Color.Black
    7. Dim CurrentColor2 As Color = Color.White
    8. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    9. OpenFileDialog1.ShowDialog()
    10. If DialogResult.Abort = True Then
    11. Else
    12. BMP = New Bitmap(OpenFileDialog1.FileName, True)
    13. NewBMP = New Bitmap(BMP.Width * scaleFactor, BMP.Height * scaleFactor)
    14. Using g As Graphics = Graphics.FromImage(NewBMP)
    15. g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor
    16. g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half
    17. g.DrawImage(BMP, 0, 0, NewBMP.Width, NewBMP.Height)
    18. End Using
    19. pb_Draw.Image = NewBMP
    20. End If
    21. End Sub
    22. Private Sub pb_Draw_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles pb_Draw.Paint
    23. If Not NewBMP Is Nothing Then
    24. e.Graphics.DrawImage(NewBMP, 0, 0)
    25. End If
    26. End Sub


    Dies ist mein aktueller Code. Ich weiß, er ist noch sehr unsauber und kann gerne korrigiert werden falls sich jemand Zeit dafür nehmen möchte.

    Also zum Problem: ich habe einen Button, wo man beliebige Bilderdateien öffnen kann welche in die Picturebox eingefügt werden. Bis jetzt soll man vorab 32x32 Bilder bearbeiten können, andere Auflösungen sind mir momentan noch nicht wichtig. Und jetzt möchte, dass man auf der PictureBox zeichnen kann, sodass es am Ende auch als 32x32 Bitmap abgespeichert werden kann. Wenn ich nämlich die Datei über meinen Save Button speichere mit folgendem Code:

    Quellcode

    1. Dim ofdSave As New SaveFileDialog
    2. ofdSave.FileName = Nothing
    3. ofdSave.Filter = "Bitmaps (*.bmp)|*.bmp"
    4. ofdSave.ShowDialog()
    5. NewBMP.Save(ofdSave.FileName)


    wird die Datei als gewünschte Bitmap gespeichert, aber leider in 512x512 da meine PictureBox so groß ist. Ich kann es nicht besser erklären, ich hoffe ihr wisst wie ich das meine. Die Zoom-Funktion ist deshalb drin, damit die Grafiken auch gut erkennen kann. Mit einem 32x32 Control ist dies ja nicht möglich! Wisst ihr vielleicht weiter? ?(


    Liebe Grüße

    crashoverride

    *Topic verschoben*

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Anstatt ein Bitmap zu Laden und zu skalieren und dann das skalierte Bild anzuzeigen wäre die eigentliche herangehensweise folgende:
    1. Bild Laden und in Variable behalten
    2. Bild auf ein Control zeichnen mit gegebenfalls Skalierung: bei dir Zeile 18-20 im Prinzip. Nur in ein Paint-Ereigniss
    3. Beim zeichnen(MouseDown/Move-whatever) auf diesem Control dann das Bitmap bearbeiten(bei (X,Y)/Skalierungsfaktor natürlich)
    4. verändertes Bitmap abspeichern....
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---