我的问题是:我有一个必须用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)每个像素需要多个字节。
所以,我不知道如何改造它
答案 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));
}