256 Farben Screenshot
-
Hallo !
Wie kann man einen 256 Farben Screenshot erstellen ?
Meine bisherigen Versuche:
Habe bei dem Beispiel aus der FAQ bmih.biBitCount=8 gesetzt.
Zu bmfh.bfOffBits sizeof(palette) addiert.
Und die Palette unsigned char palette[256] gespeichert.
Die Werte der Palette sind palette[i] = i, mit i = 0 bis 255;Das sind natürlich nicht die richtigen Farbwerte, das Bild, das entsteht, ist seeehr, seeeeeehr dunkel.
Wie bekomme ich die richtigen Farben in die Palette ?Eine Möglichkeit wäre einen 24 Bit Screenshot zu machen und dann die Farben auf
die 8 Bit Palette umzurechnen. Das dauert natürlich eine Weile.
Gibt es eine schnuckelige WinApi Funktion, die mir die richtigen Palettenfarben gibt ?
-
Hmm, gibt man bei der Palette nicht normalerweise COLORREFs an?
-
Für 256 Farben brauch ich ne Palette mit Byte-Werten.
-
Ganz trivial ist das nicht, man muss es selber implementieren.
Zum Beispiel indem man aus allen vorkommenden Farben 256 möglichst geeignete "mittlere" Farben ermittelt. Dann muss man den Farbwert aller Pixel auf die jeweils am besten passende dieser 256 Farben setzen. Man kann dabei ohne weiteres auch durchgängig mit COLORREFS arbeiten.
Häufig wird dafür der Median-Cut-Algorithmus (siehe Google) verwendet.
Walter Z
-
Oha, schonmal CreateBitmap mit dem Farbtiefenwert 8 versucht?
-
So, nach ein paar Tagen rumprobieren und MSDN lesen, habe ich es nun doch noch hingekriegt.
Mit den Funktionen CreateCompatibleBitmap und GetDIBits klappt es.
Wenn ich das farbreduzierte Bild durch die zlib-Bibliothek schicke, hab ich nen
Screenshot der Größe < 10 KB.Das hat sich also gelohnt und darum auch ein grosses Lob an Undertaker für den Tip mit der Farbreduktion.

-
Hi,
Kannst du mir da "lese Tipps" oder ähnliches zum verkleinern
der bmp geben oder eine "einfache" möglichkeit ein jpg oder png
daraus zu machen?
Alles was ich ausprobiert habe führte zu Bildern die
nicht mehr angezeigt werden konnten oder vollkommen unkenntlich sind....
Danke
-
oder eine "einfache" möglichkeit ein jpg oder png
daraus zu machenDazu kannst du eine Library wie z.B. die FreeImage verwenden.