Android中如何將Bitmap byte裸數據轉換成Bitmap圖片int數據
2014-06-11 10:45:14 閱讀375次
我們在JNI中處理得到的BMP圖片Raw數據,我們應該如何轉換為Bitmap呢?
由於得到的數據是unsigned char *類型的數據,而對於Bitmap的類來說,其類方法里面:
1
2
|
public
static
Bitmap createBitmap(
int
colors[],
int
offset,
int
stride,
int
width,
int
height, Config config)
|
要求傳入的是int *數據,這里我們就需要將unsigned char *數據轉換為RGB的int值了。
java里面的方法可以采取如下代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
public
static
int
convertByteToInt(
byte
data){
int
heightBit = (
int
) ((data>>
4
) &
0x0F
);
int
lowBit = (
int
) (
0x0F
& data);
return
heightBit *
16
+ lowBit;
}
public
static
int
[] convertByteToColor(
byte
[] data){
int
size = data.length;
if
(size ==
0
){
return
null
;
}
int
arg =
0
;
if
(size %
3
!=
0
){
arg =
1
;
}
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
]);
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;
}
Bitmap decodeFrameToBitmap(
byte
[] frame)
{
int
[]colors = convertByteToColor(frame);
if
(colors ==
null
){
return
null
;
}
Bitmap bmp = Bitmap.createBitmap(colors,
0
,
1280
,
1280
,
720
,Bitmap.Config.ARGB_8888);
return
bmp;
}
|
代碼不解釋,有問題博客提一下,會解答。
-END-