Bilddatei mit 32 Bit per Pixel erzeugen

  • VB.NET

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

    Bilddatei mit 32 Bit per Pixel erzeugen

    Moin Leute.
    Folgender Sachverhalt:
    In meiner Software lese ich Bilddateien ein und konvertiere die Pixel-Information in ein Array.
    Um dies zu testen lese ich Bilder verschiedener Pixelformate ein.
    Den Algo habe ich nun getestet, indem ich ein eingelesenes Bild intern in 32 BPP konvertiere.
    ======
    Folgendes Problem:
    Leider bin ich nicht in der Lage, ein Bild mit 32 BPP zu generieren noch habe ich ein solches gefunden.
    Ich habe probiert, ein Bild mit Transparenz und A-Komponente zu erzeugen.
    Im Programm ist alles da. Wird es gespeichert, kommen nur 24 BPP an. ;(
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim bmpIndexed = New Bitmap("C:\Temp\Test1.png")
    4. Dim bmp = New Bitmap(bmpIndexed.Width, bmpIndexed.Height, Imaging.PixelFormat.Format32bppArgb)
    5. Using g = Graphics.FromImage(bmp)
    6. g.DrawImage(bmpIndexed, 0, 0)
    7. ' Weiß => Transparent
    8. bmp.MakeTransparent(Color.White)
    9. For i = 0 To 100
    10. ' ein Stück Diagonale halbtransparent
    11. Dim col = bmp.GetPixel(i, i)
    12. bmp.SetPixel(i, i, Color.FromArgb(128, col))
    13. col = bmp.GetPixel(i, i)
    14. Next
    15. bmp.Save("C:\Temp\Test2.png", Imaging.ImageFormat.Png)
    16. 'bmp.Save("C:\Temp\Test2.bmp", Drawing.Imaging.ImageFormat.Bmp) ' hier kommt keine Halb-Transparenz an
    17. End Using
    18. ' Hier kommen nur 24 BPP an!!!
    19. Process.Start("C:\Temp\Test2.png")
    20. End Sub
    21. End Class

    Weiß jemand von Euch, wie man ein 32-BPP-Bild auf den Datenträger bekommt?

    *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 Öffne die betreffende Datei im IrfanView, da wird unten links die Farbtiefe angezeigt. 24 BPP.
    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!

    RodFromGermany schrieb:

    Genau das ist das Problem.

    RodFromGermany schrieb:

    Weiß jemand von Euch, wie man ein 32-BPP-Bild auf den Datenträger bekommt?


    Verstehe ich jetzt nicht. Auf der Platte liegt doch ein 32bpp Bild. Nur IrfanView hat hier das problem, dass das Bild in 24bpp angezeigt wird. Öffne das mit Paint.Net oder Photoshop oder lade es in ein Bitmap in VB.Net und du hast die Transparent mit 32bpp. IrfanView zeigt die Transparent nicht an, aber das ist ja deren Problem und nicht das von der Datei also dem PNG Bild.

    Könntest du bitte nochmal genauer dein Problem beschreiben oder was du vor hast, denn ich habe das nocht nicht ganz verstanden, aber vermutlich ist dein Code soweit korrekt.
    @Bluespide Jou, das isses. :thumbup:
    Der Irfan schiebt die Pixel zusammen bis zum GetNo.
    Ich habe ein Bild mit 32 BPP gefunden, das wird vom Irfan als 4 BPP angezeigt.
    Das andere Problem: Meine Testbilder waren tatsächlich nur 24 BPP tief, die kamen so aus der Kamera raus.
    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!