C # - Wie man ein Bild in ein 8-Bit-Farbbild konvertieren?
-
21-09-2019 - |
Frage
ich brauche ein PNG-Bild aus einer Datei in einen 8-Bit-pro-Pixel-Byte-Array, von einer anderen Gerät (Embedded-Programmierung) verwendete geladen konvertieren.
Ich bin Kopieren über Pixel für Pixel in ein neues Bild erstellt mit einer 16-Bit-Farbe - Format16bppRgb565
, aber ich brauche Format8bpp
, die in .NET Framework nicht vorhanden ist. (Ich kann nicht Format8bppIndexed
seit dem anderen Gerät verwenden, können nicht indizierte Bitmaps behandeln)
Bitmap img = new Bitmap(imgPath);
Bitmap img8 = new Bitmap(imgW, imgH, PixelFormat.Format16bppRgb565);
for (int I = 0; I <= img.Width - 1; I++) {
for (int J = 0; J <= img.Height - 1; J++) {
img8.SetPixel(I, J, img.GetPixel(I, J));
}
}
Wie kann ich ein Bild in einen 8-Bit-pro-Pixel-Byte-Array umwandeln?
- Kann ich das 8-Bit-indizierten Format verwenden und das Bytes extrahieren? -
Format8bppIndexed
- Kann ich die Pixelfarben berechnen durch die Reduzierung der 32-Bit-Farbe R, G, B-Werte in 8-Bit?
- Gibt es eine C # -Bibliothek, die diese bereits tut?
- „Der einfachste Weg ist es, einen neuen 8-Bit-Bitmap zu erstellen, und Ihr 24-Bit-Bild zeichnet auf sie.“ - wie
Lösung
Obwohl ich nicht sicher bin, wie es mit Plain-Vanilla-C # zu tun, können Sie das Freeimage Projekt Bibliotheken zu konvertieren Bildformate:
Freeimage ist eine Open-Source-Bibliothek Projekt für Entwickler, die gerne zur Unterstützung Bild beliebter Grafiken Formate wie PNG, BMP, JPEG, TIFF und andere, wie von den heutigen Multimedia benötigt Anwendungen. Freeimage ist leicht zu Einsatz, schnell, Multithreading-Safe, kompatibel mit allen 32-Bit-Versionen von Windows und plattformübergreifende (Werke sowohl mit Linux und Mac OS X).
Es ist in C ++ geschrieben, aber hat eine gute .NET-Wrapper Sie verwenden können.
Andere Tipps
Ich habe es bereits in einem Mustererkennung Projekt. Suche einige Bildverarbeitung und Mustererkennung Bücher, die Sie diese Lösungen finden können.
a) Wenn Sie in Graustufen konvertieren Sie im Allgemeinen zwei Lösungen finden können.
# 1 Averaging RGB-Kanäle. - Sie können 8-Bit-Werte für Einkanal avery nehmen und berechnen Pixel = (R + G + B) / 3
# 2 Nehmen Sie nur die grüne Komponente. Es ist am besten gesehen.
b) Wenn Sie auf 8bit Farbdarstellung konvertieren wollen, müssen Sie eine Farbtabelle verwenden. Sie können eine Lösung finden hier http://www.codeproject.com/KB/graphics/Image_Bitdepth_Conversion aspx