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
War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top