2014年7月26日土曜日

android jni bitmapの並び

unsigned int RGB(unsigned char r, unsigned char g, unsigned char b)
{
    return 0xff000000 | (b << 16) + (g << 8) + (r );
}

RGBA_8888はWindowsのビットマップと同様の並びになっている。

unsinged intの 4バイトに収めた時に、右端のバイトからR,G,B,Aの順という意味。

16進数なら0xAABBGGRRという形式ということで、メモリ上に展開されているのはもちろん、インテル方式である。私はリトルエンディアンとビッグエンディアンという言い方が嫌いだ。憶えられないからだ。リトルエンディアンはインテル方式、ビッグエンディアンはモトローラ方式と記憶しているので、どっちがどっちなのか忘れてしまう。インテル方式で良いでしょ。卵を想像して、もともとどちらが上、右とか判らないでしょ。それとも、あの、エッグスタンドには卵の上下があるのでしょうか。誰か教えてください。

今の所、問題は無いけど、モトローラ型のAndroidが出るかもしれませんね。あるのかな?

2014年7月10日木曜日

えー、GZIPInputStreamって

zip = new GZIPInputStream(new BufferedInputStream(fis));

int nLen = 0;
while(true)
{
    int nLen2 = zip.read(babuf, nLen, babuf.length - nLen);
    if (nLen2 <= 0)
        break;
    nLen += nLen2;
    Log.d(TAG, String.format("zip read length = %d this time %d bytes", nLen, nLen2));
}

read時にどんなに大きなバッファを用意していても、Open時のバッファ指定より大きいデータを読み取ってくれないのね。知らんかった。内部バッファと外部バッファの差を吸収してくれないのかよ。

zip = new GZIPInputStream(new BufferedInputStream(fis), 0x10000);

で64kまでは1回で読み取ってくれるね。

あー、気づかなかった。30分は悩んだね。だからJavaは嫌いよ。ライブラリの中身がどうなってるか判らないからね。サンプルも嘘ばっかりだし。愚痴っても仕方ないね。みんなよくやってるね。