Bild pixelgenau bearbeiten und speichern

  • C#
  • .NET (FX) 4.5–4.8

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

    Bild pixelgenau bearbeiten und speichern

    Hi,
    Ich versuche Bilder zu bearbeiten und zu speichern, allerdings muss das ganz genau funktionieren, also dass, wenn ich einem bestimmten Pixel eine bestimmte RGB-Farbe gebe, dass der diese dann auch (nach dem Speichern und laden) behält und nicht irgendwie gerundet wird oder so. Ich habe gehört, dass das mit bmp-Grafiken gehen soll (stimmt das?), allerdings, wenn ich das Bild so speicher:

    C#-Quellcode

    1. myImage.Save(strFile, System.Drawing.Imaging.ImageFormat.Bmp);
    dann kann ich nach dem laden nicht mehr die .SetPixel(x, y, Color) Methode verwenden, weil er dann sagt:
    SetPixel wird für Bilder mit indizierten Pixelformaten nicht unterstützt.

    Vielen Dank für eure Hilfe

    Sederic Enders schrieb:

    mit indizierten Pixelformaten
    Du hast eine Bilddatei mit einer separaten Palette, nicht RGB24 oder RGB32.
    Wenn Du dieses Bild verwenden willt, musst Du es in eine RGB24- oder RGB32-Bitmap reinmalen:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim bmp = New Bitmap(100, 100, Imaging.PixelFormat.Format8bppIndexed) ' dies sei Dein indiziertes Bild
    3. 'bmp.SetPixel(10, 10, Color.Aqua) ' => Exception
    4. Dim myImage = New Bitmap(100, 100, Imaging.PixelFormat.Format24bppRgb)
    5. Dim gr As Graphics = Graphics.FromImage(myImage)
    6. gr.DrawImage(bmp, New Point(0, 0))
    7. myImage.SetPixel(10, 10, Color.Aqua) ' dies geht
    8. Me.PictureBox1.Image = myImage
    9. myImage.Save(strFile, System.Drawing.Imaging.ImageFormat.Bmp)
    10. End Sub

    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!