GIFのパレット変換

GIFは、グローバルカラーテーブルが存在するという前提ならば、簡単にパレット変換ができます。

/**
 * @brief GIF 画像のパレット変更を行います。
 * 
 * @param buf GIF 画像のデータが入ったバッファ
 * @param pal パレット画像のデータが入ったバッファ
 *            (GIF のパレットデータの形式に準ずる)
 * 
 * @return @a buf をコピーしてパレットデータを書き換えたバッファを返します。
 */
private byte[] changePalette(byte[] buf, byte[] pal)
{
    byte[] buf2;
    int palsize;

    buf2 = new byte[buf.length];
    System.arraycopy(buf, 0, buf2, 0, buf.length);

    // Size of Global Color Table
    palsize = (1 << ((buf[10] & 0x07) + 1)) * 3;

    // copy palette
    System.arraycopy(pal, 0, buf2, 13,
        (palsize < pal.length) ? palsize : pal.length);

    return buf2;
}

出来上がりヽ(´ー`)ノ