投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/2/11 01:14:52
2色(1bit)ビットマップなら、1バイトで8ドット分の情報を表せますし、
16色(4bit)ビットマップなら、1バイトで2ドット分の情報を表せます。
256色(8bit)ビットマップなら、1バイトで1ドット分の情報を表せます。


> ARGBを順番に1バイトずつ保存しています。
ということは、1ドットあたり 4バイト必要ということですよね。(32bitカラー)

その場合、たとえば 縦横2000ドットの正方形写真があり、それを非圧縮で格納する場合、
単純換算でも、2000×2000×4 のバイト数、つまり約15MBの領域が必要となります。
(実際には、これに加えて画像サイズや色数などの情報が必要になります)


> デフレートやGZIPで圧縮してみたのですが
データの並びによっては、圧縮処理によって、かえって肥大化してしまう事もあります。
(既に JPEG/PNG 等で圧縮済みのデータを、さらに圧縮しようとした場合など)


> 全然効果がありません
独自形式にこだわらないなら、Png 形式で保存してしまうとか。
http://dobon.net/vb/dotnet/graphics/saveimage.html

この場合、作成した画像を AzConvPNG 等で再保存すれば、さらに小さくなる可能性もあります。
http://hp.vector.co.jp/authors/VA033749/index.html


> できれば.NETのライブラリのみで実現したいです。
圧縮アルゴリズムの話を知りたいのであれば、このあたりは如何でしょう。

考え方自体の話なので、System.IO.Compression などのように、手軽に使うというわけには
いきませんが、実装の手間さえ惜しまなければ、.NET Framework のみでも実現可能かと思います。

http://www.ruche-home.net/?%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%2FBMP%A5%D5%A5%A1%A5%A4%A5%EB%BB%C5%CD%CD%2FRLE%A4%CB%A4%E8%A4%EB%B0%B5%BD%CC
http://www.01-tec.com/document/basic_compression.html
http://oku.edu.mie-u.ac.jp/~okumura/compression/
http://www.amazon.co.jp/o/ASIN/4797324287
http://www.amazon.co.jp/o/ASIN/478983672X