显示表示灰度图像的双值矩阵

时间:2013-11-12 10:51:10

标签: android image

我的问题是:我有一个必须用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 matrix是double [] [],它代表灰度图像。使用Double类的byteValue方法将每个像素转换为字节。

我认为这是错误的,因为我正在使用的格式(ARGB_8888或RGB_565)每个像素需要多个字节。

所以,我不知道如何改造它

1 个答案:

答案 0 :(得分:1)

如果您要显示的图像数量最少,则可以使用ARGB_8888继续 它增强了图像清晰度和颜色 这里每个像素存储在4个字节上。

如果您使用的图像数量较多,请使用RGB_565

此处每个像素存储在2个字节上,只有RGB通道被编码。

任何你想要它的灰度,所以你可以继续使用RGB_565,它消耗更少的RAM。

  @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));
  }