【发布时间】:2015-04-05 02:11:36
【问题描述】:
您好,我正在尝试通过 tcp 套接字将我在 Java 应用程序上的 BufferedImage 发送到 Android 设备。我目前从 BufferedImage 获取 byte[] 中的栅格,然后通过普通的 OutputStream 将其发送到设备。这工作正常,我在 Android 端得到了相同的字节数组。但是,当我调用 Bitmap.decodeByteArray() 时,我只得到空值。
这是我必须用 Java 发送图片的代码。 BufferedImage 的图像类型为 TYPE_4BYTE_ABGR
byte[] imgBytes = ((DataBufferByte)msg.getImage().getData().getDataBuffer()).getData();
lineBytes = (String.valueOf(imgBytes.length) + '\n').getBytes();
out.write(lineBytes);
out.write(imgBytes);
out.write((int)'\n');
out.flush();
我写的第一件事是图像的大小,所以我知道在 Android 上制作 byte[] 有多大。
这是我试图用来创建 Android 位图的代码。
currLine = readLine(in);
int imgSize = Integer.parseInt(currLine);
byte[] imgBytes = new byte[imgSize];
in.read(imgBytes);
BitmapFactory.Options imgOptions = new BitmapFactory.Options();
imgOptions.inPreferredConfig = Bitmap.Config.ARGB_4444;
Bitmap img = BitmapFactory.decodeByteArray(imgBytes, 0, imgSize, imgOptions);
字节可以正常到达。它们只是不适用于位图。
【问题讨论】:
-
您可能不想解码数组,因为字节一开始就没有编码。它只是“原始”像素。您还需要传递高度和宽度以正确重建图像。尝试
Bitmap.createBitmap方法之一。
标签: java android bitmap bufferedimage