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 格式。

我不知道哪种是显示灰度矩阵的最佳格式。

有什么建议吗?

//编辑此代码中的问题是图像不显示。我认为我所做的转换是错误的:

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 回答