有一个RGB24图像的数据存储在一个Byte[]里,如何将其显示到界面?
解决方案 »
- 那位高手能帮我申请一个googlemap apikey啊。非常感谢啦!
- 提示框的用法
- 新手提问,编译android源代码的目的是啥……
- 察看 intent-filter
- android应用?游戏?
- 怎样把nginx打包进apk
- 用百度定位SDK创建围栏的时候报1002错误
- android4.2中用程序调用shell命令不成功?
- Android中Fatal signal 11 (SIGSEGV) at 0x6df6d7bf (code=2), thread 31535 问题
- 有没有以Android Studio为IDE开发的项目实战的书籍
- 求教:Android 闹钟程序如何显示最近闹钟的时间
- 怎么设置EditView的默认值,要浅色的,不能编辑的那种,急
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
ImageView i = new ImageView(this);
// 设置图片给ImageView
i.setImageBitmap(bitmap);
Config里好像没有RGB24类型的
int []colors = convertByteToColor(data);
if (colors == null){
return null;
}
Bitmap bmp = Bitmap.createBitmap(colors, 0, width, width, height,
Bitmap.Config.ARGB_8888);
return bmp;
}
// 将一个byte数转成int
// 实现这个函数的目的是为了将byte数当成无符号的变量去转化成int
public int convertByteToInt(byte data){
int heightBit = (int) ((data>>4) & 0x0F);
int lowBit = (int) (0x0F & data);
return heightBit * 16 + lowBit;
}
// 将纯RGB数据数组转化成int像素数组
public int[] convertByteToColor(byte[] data){
int size = data.length;
if (size == 0){
return null;
}
int arg = 0;
if (size % 3 != 0){
arg = 1;
}
// 一般情况下data数组的长度应该是3的倍数,这里做个兼容,多余的RGB数据用黑色0XFF000000填充
int []color = new int[size / 3 + arg];
int red, green, blue;
if (arg == 0){
for(int i = 0; i < color.length; ++i){
red = convertByteToInt(data[i * 3]);
green = convertByteToInt(data[i * 3 + 1]);
blue = convertByteToInt(data[i * 3 + 2]);
// 获取RGB分量值通过按位或生成int的像素值
color[i] = (red << 16) | (green << 8) | blue | 0xFF000000;
}
}else{
for(int i = 0; i < color.length - 1; ++i){
red = convertByteToInt(data[i * 3]);
green = convertByteToInt(data[i * 3 + 1]);
blue = convertByteToInt(data[i * 3 + 2]);
color[i] = (red << 16) | (green << 8) | blue | 0xFF000000;
}
color[color.length - 1] = 0xFF000000;
} return color;
}
}这个类可以转