質問: この画像は(77のところは抜いて)最低なんビットで表せるでしょうか? 赤がふたます黒が4ます。として。 (ちなみに自分の似顔絵です)
回答: とりあえず、一例として、一般的な画像形式で保存してみた画像のサイズを記載してみます。 そういうことを聞いているんじゃないとも思いますが。 !png形式 見えにくいので拡大してみます。(なんかぼやけちゃいましたが元は4×2の画像のはず) !png形式 さて、この画像を色んな形式で実際に保存してみました。 16色ビットマップ:126 バイト 256色ビットマップ:1,086 バイト 24ビットビットマップ:78 バイト png:129 バイト jpeg:709 バイト 大体そんな感じですが、jpgにしたら何故か色がくすんだり、元のデータによって形式変換後のデータサイズが変わったりと安定はしてません。 一番小さいのが24ビットのビットマップ(78バイト)ですが、他にも画像形式は沢山あるので、これが最低ではないということは明らかでしょう。 容量制限のきつかった時代のファミコンの画像形式などは面白いので一読の価値ありです。 さて、一般的な画像ファイル形式は汎用性が大切なので、ある程度あらゆる画像に対応する必要があります。 などを読めば、わかります。 先頭にBM (0x42, 0x4d)という2byteのデータがあり、ちゃんとBMP形式であるかのチェックなどに使われるわけです。ここが違ってるとそもそも破損ファイルとして扱うとか。 次に4byteのファイルサイズを格納してる領域があります。 他にも、ビットマップでも何色のビットマップであるか、などなど。 今後の拡張のためやらキリをよくするために予約領域なんていうのもあったりします。 そして、ぶっちゃけこれらの情報、全部いるか? ってなるといらないものも多いし、無駄に大きな格納領域を使っちゃっているところも多い(かも)。(容量削減を追及するにあたっては) つまるところは、事前の決め事はなに? っていうのがはっきりしないと、最低って何なのか明らかになってきません。 例えば、使う色の種類が、(黒、白、赤、+α)の4種類だと2bitで表せますし、16色使うのであれば4bitかかりますが、 それでもやり方が色々あって、 ・使う色の一覧を外部に用意してそこから参照する場合 ・使う色の一覧を画像ファイル自体に持っていてそこから参照する方法 ・ビットの並び順のデータ(各ピクセル)に色情報を直接持つ方法(RGBなどで) とかですかね。詳しくないんですけれど(突っ込み待ち) 要は、既存の(一般的な)ファイル形式でだと、最低なんビットの画像ファイルがあるかの答えはあるのでしょうけれど、一般的でないファイル形式も含めると答えは見つけるのが困難。 なら、自分でファイル形式を作るとなると、どこまでが決め事なのか? で答えが変わってくるはずです。 例えば、例に上がった画像の幅、高さを内部に持つとしても、最大で8×8に対応するならば 高さに3bitの情報、幅に3bitの情報で6ビット追加になるわけですが(実際には3bitは扱いづらいので4bitずつ使うことも多かったりするとかしないとか)、 横の最大は4マスだったら、2bitで済みますし、縦の最大が2マスだったら1bitしか使いませんので、合わせて3bitで済む訳です。 似顔絵が4パターンしかなくって、どの似顔絵の画像なのか? を選ぶ方式だと、2bitで済んだりするわけですよね。それが決め事が何なのか? っていうことです。 縦横のサイズ、使う色の種類の上限が決まってたら、その中で最適な(あるいは最適に近い、独自の)ファイル形式は考えられると思います。 実際はそれプラス、全体で扱う画像の量や種類も加味して考えるのでしょうけれど。(例えば、全ての画像の幅が4ならば、画像サイズは高さのデータだけでよい、サイズが固定ならば画像サイズなんていらない、その他もろもろ) 長い割に多分いろいろ間違ってて、質問の意図も理解できてなくて自分でもなんだかなーと思いますが、寂しいので回答してみました。 なんのために知りたい情報なのか? を追記するとわたしよりもまともでわかりやすい回答が得られると思います。 以上