Bits Speichern



  • Hi! Ich möchte mich langsam ein wenig in den komprimierungen einarbeiten, dabei ziele ich darauf ein kleines eigenes komprimiertes Bild Format zu entwerfen! Die Planung ist soweit fertig, und habe auch schon viele Tests am Taschenrechner gemacht, um zu ermitteln, welchen durchschnittlichen größenunterschied das Bild zu einem gewöhnlichen Bitmap haben wird! Dabei habe ich erstaunliche unterschiede festgestellt und möchte dies so schnell wie mögich in die Praxis umsetzen. Ich habe dabei ein paar Ideen wie ich dies realisieren könnte:

    Mein Bild hat 24 Bit, jeweils 8 Bit je Farbe, also R(8), G(8), B(8). Nun könnte ich ganzeinfach einen char speichern, da ein char soweit ich weiß 8 Bit groß ist, da es ja auch nur 256 zeichen unterstützt. Nun ist aber das Problem, das ich noch ein zusätzliches Bit benötige, für zusätliche sachen, wie nächste zeile, oder wederholung einer Pixelfarbe! Nun möchte ich, eine eigene Byte größe definieren, und die bits per hand in einer txt Datei speichern, also so, da ich bit nach bit in einer txt datei speichern kann, und nicht char nach char! Das gleiche müsste dann auch wieder andersherum funktionieren, das ich Bits auslesen kann! hättet ihr eine Idee wie ich dies machen könnte?



  • hättet ihr eine Idee wie ich dies machen könnte?

    Durchaus.



  • du kannst nur in byte-schritten speichern. allerdings kannst du jeweils in 9-byte blöcken arbeiten und dann die logisch als 8 9-bitblöcke verwenden. Bits einzeln setzen kannst du per hiereinbyte |= 00001000 oder hiernocheins &= 11110111. Das würde jeweils das 5. bit auf 1 bzw. 0 setzen.



  • Danke, ich verstehe aber noch nicht geau wie du das meinst, könntest du mir vieleicht ein Beispiel geben?

    Die erste Variante verstehe ich, oder glaube ich zu verstehen. Ich hatte auch diese Idee doch halte sie für zu komplitziert. Man kann ja, intern mit Boolwerten arbeiten, so das man ein array aus Bool werten hat, daraus baue ich dann ein 9 bit Byte block, also ein array aus 9 Booleans. Nun habe ich dann wieder ein array aus diesen arrays, und habe dann so zu sagen immer 9 bit blöcke, wenn ich dies nun speichern will, gehe ich halt die reihe nach durch und speicher immer 8 bit blöcke, und wenn ich es dann wieder ladenwill mache ich das ganze wieder umgekehrt.

    Nur die zweite variante von dir verstehe ich noch nicht, ein kleines Beispiel würde mir sehr weiter helfen.



  • Heinzelotto hat nur eine Variante beschrieben.
    Das was du für die 2. Variante hältst ist bloss ein Tip wie man die eine Variante die er beschrieben hat implementieren kann.


Anmelden zum Antworten