2012-03-31 9 views
0

32×32のブール値の配列を32×32の白黒画像(ビットマップまたはPNGのいずれか)に格納しようとしていますが、黒のピクセルが真であるブール[32] [32]白は偽です。イメージをJava(Android)のBoolean Arrayに変換する方法は?

これは、仮想32 x 32ディスプレイに表示するアニメーションのフレームを格納するためのものです。これまで私がこれまで持っていたことは次のとおりです。

Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), R.raw.f1); 
bmp.compress(Bitmap.CompressFormat.PNG, 100, o_stream); 
byte[] byteArray = o_stream.toByteArray(); 

何を私はそれブール[32] [32]配列にするのByteArrayで行うのですか、私は最初の場所ですべて間違ってこれについてつもり?

+0

:なぜ、ちょうどこのように、ビットマップを自分で作成しません?ただし、これは画像の種類とカラーモ​​デルによって異なります。したがって、このイメージ実装のために最終的には32x32バイトの配列入力ではないかもしれません。 – ecle

答えて

0

私は決して画像で何もしませんでしたが(これは写真の白黒を得るために何をすべきか分かりません)、私はあなたがピクセルは黒に近いか、または白に近い。しかし、私は興味があります、バイトはどのように色を表すことができますか?たとえそれがRGBであっても、少なくとも3バイト必要ですね。

+0

私はあなたに同意します。それぞれのイメージフォーマットが異なるカラーモデル戦略を持っているからです。色を表現するために複数のバイトが必要な場合があります。アルファチャンネルのあるRGBAの場合は、RGBAカラーを表すために4バイトになります。 – ecle

+0

具体的には、黒と白の1ビット32 x 32ビットマップ、つまりpngのものを使用しています。 – Dennis

+0

私はあなたを正しく理解していますか?写真はすでに白黒ですか?その場合、変換は本当に簡単でなければなりません。バイト[] []をループし、バイトごとに移動し、1または0(または白黒が何で表されているか)をチェックし、ブール値[] [ ]をt​​rueまたはfalseに設定します。 –

0
if(src!= null){ 
ByteArrayOutputStream os=new ByteArrayOutputStream(); 
src.compress(android.graphics.Bitmap.CompressFormat.PNG, 100,(OutputStream) os); 
byte[] byteArray = os.toByteArray(); 
//Log.d("byte=",""+byteArray.length);//returns length. 
//str = Base64.encodeToString(byteArray,Base64.DEFAULT);//returns string 
} 

where src is the bitmap.... 
0

あなただけのストレージスペースを節約するためにビットマップにブール値の配列をエンコードしたい場合は、なぜイメージを使用できますか?それは余計なオーバーヘッドです。あなただけの白と黒と最高の最大バイト範囲のバイト値としてバイト32×32の配列を使用し、最下位バイトの範囲のバイト値を表すものではありませんなぜ

Boolean[][] booleanArray = ... // this is your Boolean array 
    int[] bits = new int[32]; // One int holds 32 bits 
    for (int i = 0; i < 32; i++) { 
     for (int j = 0; j < 32; j++) { 
      if (booleanArray[i][j]) { 
       // Set bit at the corresponding position in the bits array 
       bits[i] |= 1 << j; 
      } 
     } 
    } 
    // Now you have the data in a int array which you can write to a file 
    // using DataOutputStream. The file would contain 128 bytes. 

    // To recreate the Boolean[32][32] from the int array, do this: 
    Boolean[][] booleanArray = new Boolean[32][32]; 
    int[] bits = ... // This is the data you read from the file using DataInputStream 
    for (int i = 0; i < 32; i++) { 
     for (int j = 0; j < 32; j++) { 
      if ((bits[i] & (1 << j)) != 0) { 
       // Set corresponding Boolean 
       booleanArray[i][j] = true; 
      } 
     } 
    } 
関連する問題