SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

マンガで分かるプログラミング用語辞典

「インデックスカラー」
~マンガでプログラミング用語解説

マンガで分かるプログラミング用語辞典(82)

解説

 インデックスカラーは、色のインデックス(索引)を持ち、各画素ではその色を参照することで画像を表現する方式です。このインデックスのことを、カラーマップやパレットと呼びます。

 Web用の画像ではGIFがインデックスカラーの代表的な形式です。色数を減らすとファイルサイズが劇的に軽くなるのが特徴になります。

 例として、画素ごとにRGBの値を持つ画像と、16色のインデックスカラーの画像のデータ量の違いを挙げます。

 画素ごとにRGBの値を持つ画像:

  • 1画素あたりRGBを持つので3byte。
  • 横640、縦480の画像は307,200画素
  • 307,200画素×3byte÷1024=900KB

 16色のインデックスカラーの画像:

  • 1画素あたりRGBを持つので3byte。
  • 16個のカラーマップで48byte。
  • 1画素は16色の参照なので4bit(1/2byte)。
  • (48+307,200画素×1/2byte)÷1024=150.046 KB

 多くの場合、インデックスの数は、2のn乗で最大256個になります。

サンプル

 インデックスカラーを利用するコードを、JavaScriptで簡単に書いてみます。

<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8" />
        <title>「インデックスカラー」のサンプル</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
        <script type="text/javascript">
            // window.atob, window.btoa を利用(IEは10以降で動作)
            $(function() {
                // GIF画像のバイナリを取り出し
                var mime = "data:image/png;base64,";
                var img1 = $("#img1").attr("src").slice(mime.length);
                var img1Dec = window.atob(img1).split("");

                // カラーマップを書き換え
                img1Dec[13] = String.fromCharCode(0xff);
                img1Dec[14] = String.fromCharCode(0x80);
                img1Dec[15] = String.fromCharCode(0x00);

                img1Dec[16] = String.fromCharCode(0x00);
                img1Dec[17] = String.fromCharCode(0x80);
                img1Dec[18] = String.fromCharCode(0xff);

                // GIF画像のバイナリをBASE64化
                var img2Enc = window.btoa(img1Dec.join(""));
                var img2 = mime + img2Enc;
                $("#img2").attr("src", img2);
            });
        </script>
    </head>
    <body>
        <img id="img1" src="data:image/png;base64,R0lGODlhIAAgAIAAAAAA
AP///yH5BAAAAAAALAAAAAAgACAAAAJsRI6ZYOpn2kNNziCts1rpDm0T2IGYOC7XSa2sqb
Iu41Kwdy95KF/VHEu1hEEPyvgoEXnLW6b2A+4gU0yVVjvtoqunr3hkIsHDcdksNjvJyG16
dI1nrVnut5dkn2HKPPr9ZvLRpcfkhpcnV1cAADs=">
        <img id="img2">
    </body>
</html>
出力結果
出力結果
フィードバックお待ちしております!

 ご感想、解説して欲しい用語、解説内容のアドバイスなどございましたら、FacebookTwitterなどでお気軽に編集部までお寄せください。よろしくお願いいたします。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
マンガで分かるプログラミング用語辞典連載記事一覧

もっと読む

この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/8738 2015/07/07 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー