Problem mit Zoom einer kleinen Bitmap über DrawImage()

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

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Problem mit Zoom einer kleinen Bitmap über DrawImage()

    Moin Leute,
    im Zusammenhang mit einem größeren Projekt ist mir folgendes aufgefallen:
    Ich erzeuge eine 4x4-Pixel große Bitmap mit Schachbrett-Muster, diese wird angezeigt.
    Mit DrawImage() zoome ich sie um den Faktor 50 und zeige sie ebenfalls an.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim bmp1 = New Bitmap(4, 4)
    4. For x = 0 To 3
    5. For y = 0 To 3
    6. bmp1.SetPixel(x, y, If((((x + y) And 1) = 0), Color.White, Color.Black))
    7. Next
    8. Next
    9. PictureBox1.Image = bmp1
    10. Dim bmp2 = New Bitmap(200, 200)
    11. Using g = Graphics.FromImage(bmp2)
    12. g.Clear(Color.Red) ' Hintergrund signifikant färben
    13. g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor
    14. g.DrawImage(bmp1, 0, 0, 200, 200)
    15. 'g.DrawImage(bmp1, New Rectangle(0, 0, 200, 200), New Rectangle(0, 0, 4, 4), GraphicsUnit.Pixel)
    16. End Using
    17. bmp2.Save("c:\Temp\Test.png", System.Drawing.Imaging.ImageFormat.Png)
    18. PictureBox2.Image = bmp2
    19. End Sub
    20. End Class
    Das Ergebnis spricht für sich:
    und die gespeicherte Bitmap
    Der rote Rand ist der Hintergrund der befüllten Bitmap.
    Der Output ist mit beiden Überladungen von DrawImage() gleich.

    Eigentlich würde ich erwarten, dass der Output ein "vollständiges" Schachbrett ist und der Hintergrund nicht zu sehen.
    Wenn ich den Ursprung um 25, 25 verlagere, ist die Bitmap unten rechts vollständig und oben links ist der rote Hintergrund.

    Wie lässt sich das lösen?

    *Topic verschoben*
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

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

    @Bluespide HighQualityBicubic - nein, das verlutscht die Kanten. Das Sachachbrett muss scharf kommen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Bluespide Jou. PixelOffsetMode war mir bis eben nicht geläufig. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!