我面临一个真正的问题。我需要将图像转换为字节数组格式,以便我可以将字节数组上传到Web服务器。我已经尝试了很多,但它不起作用。我也得到字节数组的负值。我不确定在数组中获取字节值我做错了什么。
以下是我的代码。请帮帮我,我做错了什么?
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.home_menu_icon);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, bos);
byte[] data = bos.toByteArray();
答案 0 :(得分:1)
如果您的图片来自GALLERY和CAMERA
,我会在这里展示代码if (requestCode == IMAGE_PICKER_REQUEST && resultCode == RESULT_OK) {
fileName = getRealPathFromURI(data.getData());
try {
if (bitmap != null) {
bitmap.recycle();
}
InputStream stream = getContentResolver().openInputStream(
data.getData());
bitmap = BitmapFactory.decodeStream(stream);
stream.close();
image.setImageBitmap(bitmap);
//picNameText.setText("Selected: en"
// + getStringNameFromRealPath(fileName));
ByteArrayOutputStream stream1 = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream1);
imageInByte = stream1.toByteArray();
}catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
if (requestCode == IMAGE_TAKER_REQUEST && resultCode == RESULT_OK) {
Bitmap photo = (Bitmap) data.getExtras().get("data");
image.setImageBitmap(photo);
ByteArrayOutputStream stream2 = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.PNG, 100, stream2);
imageInByte = stream2.toByteArray();
}
享受它为我工作.....
答案 1 :(得分:0)
请尝试以下代码。
int bytes = bitmap.getByteCount();
//Create a new buffer
ByteBuffer buffer = ByteBuffer.allocate(bytes);
//Move the byte data to the buffer
b.copyPixelsToBuffer(buffer);
byte[] array = buffer.array();
答案 2 :(得分:0)
Bitmap.getPixels()
和
Bitmap.setPixels()
将Bitmap转换为int数组和vise
诗。并且int数组可以很容易地转换为字节数组。Bitmap.copyPixelsToBuffer()
显示了一个很好的解决方案,与第一个几乎相同。答案 3 :(得分:0)
32位位图使用int32来保存ARGB颜色,我们可以使用int数组来表示位图。使用Bitmap.getPixels()和Bitmap.setPixels()将Bitmap转换为int数组和vise verse。并且int数组可以很容易地转换为字节数组。