0

私の問題は次のとおりです。ImageViewで表示する必要があるバイト配列があります。これは私のコードです:

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ImageView imageView = (ImageView)findViewById(R.id.show_image);
    byte[] arrayBytes = ...; // It's initialized
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSample = 4;
    imageView.setImageBitmap(BitmapFactory.decodeByteArray(arrayBytes,0,arrayBytes.length,options));
  }

バイト配列に格納される各バイトは double[][] の要素ですが、バイト形式です。Android はデフォルトで ARGB_8888 形式を使用します。

グレー スケール マトリックスを表示するのに最適な形式がどれかわかりません。

なにか提案を?

//EDIT このコードの問題は、画像が表示されないことです。私が行った変換は間違っていると思います:

byte[] byteArray = new byte[SIZE];
int k = 0;

for(...i) {
    for(...j) {
        byteArray[k] = Double.valueOf(matrix[i][j]).byteValue();
        k++;
    }
}

var 行列は double[][] であり、グレースケール イメージを表します。各ピクセルは、Double クラスの byteValue メソッドを使用してバイトに変換されます。

私が使用している形式 (ARGB_8888 または RGB_565) では、各ピクセルに複数のバイトが必要なため、間違っていると思います。

だから変換の仕方がわからない

4

1 に答える 1

1

表示する画像の最小数がある場合は、ARGB_8888 を使用して先に進むことができます。これにより、画像の鮮明度と色が向上します。ここでは、各ピクセルは 4 バイトに格納されます。

より多くの画像を使用している場合は、RGB_565 を使用してください

ここでは、各ピクセルが 2 バイトに格納され、RGB チャネルのみがエンコードされます。

RAM の消費量が少ない RGB_565 を使用できるように、グレースケールが必要な場合があります。

  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ImageView imageView = (ImageView)findViewById(R.id.show_image);
  byte[] arrayBytes = ...; // It's initialized
  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inSample = 4;

  // Add this line in your code
  options.inPreferredConfig = Bitmap.Config.RGB_565; 


  imageView.setImageBitmap(BitmapFactory.decodeByteArray(arrayBytes,0,arrayBytes.length,options));
  }
于 2013-11-12T12:04:59.530 に答える