我正在尝试实现两种方法。
将ImageView作为输入并输出未压缩的字节数组。
第二个采用字节数组输入并转换为位图。
这是我使用的两种方法,但是bytesToImage()无法生成imageToBytes输出的有效位图表示:
private static byte[] imageToBytes(ImageView iv) {
byte[] imageInByte = null;
Bitmap originalImage;
BitmapDrawable drawable = (BitmapDrawable) iv.getDrawable();
originalImage = drawable.getBitmap();
int numOfbytes = originalImage.getByteCount();
ByteBuffer buffer = ByteBuffer.allocate(numOfbytes);
originalImage.copyPixelsToBuffer(buffer);
imageInByte = buffer.array();
return imageInByte;
}
private static Bitmap bytesToImage(byte data[]) {
ByteBuffer byte_buffer = ByteBuffer.wrap(data);
byte_buffer.rewind();
Bitmap bmp = Bitmap.createBitmap(60, 60, Bitmap.Config.ARGB_8888);
bmp.copyPixelsFromBuffer(byte_buffer);
return bmp;
}
然后以下列方式调用这些方法:
ImageView iv = (ImageView) findViewById(R.id.imageViewInput);
iv.setImageResource(R.drawable.panda);
imageInBytes = imageToBytes(iv);
Bitmap bmp = bytesToImage(imageInBytes);
ImageView image = (ImageView) findViewById(R.id.imageViewOutput);
image.setImageBitmap(bmp);
然而,imageViewOutput只显示一个空白框。
图片熊猫是.bmp图片
答案 0 :(得分:0)
在imageToBytes方法上试试这个
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
在您的bytesToImage
上BitmapFactory.decodeByteArray(bitmapdata , 0, bitmapdata .length);
答案 1 :(得分:0)
所以问题是bytesToImage中的位图配置不正确。
这需要直接传入原始位图。
这是更新的bytesToImage方法,它给出了正确的答案。
private static Bitmap bytesToImage(byte data[], Bitmap originalImage) {
Bitmap newBmp;
newBmp = Bitmap.createBitmap(originalImage.getWidth(), originalImage.getHeight(), originalImage.getConfig());
ByteBuffer buffer1 = ByteBuffer.wrap(data);
buffer1.rewind();
newBmp.copyPixelsFromBuffer(buffer1);
byte[] imageInByte = null;
ByteBuffer byte_buffer = ByteBuffer.wrap(data);
byte_buffer.rewind();
newBmp.copyPixelsFromBuffer(byte_buffer);
return newBmp;
}