从byte []创建位图

时间:2016-02-01 15:08:11

标签: java android image image-processing bitmap

我试图在我的Android设备上从提供的Bitmap构建byte[]

正在从我的计算机发送byte[],该计算机具有作为服务器运行的普通Java程序。一旦我的Android设备连接,Java程序就开始从我的网络摄像头抓取BufferedImage,然后将BufferedImage的内容作为byte[]发送到我的Android设备。

这就是我将计算机数据从我的计算机发送到我的Android设备的方式...... frameBufferedImage,其大小始终为176x144。

int[] pixels = frame.getRGB(0, 0, frame.getWidth(), frame.getHeight(), null, 0, 176);

for (int i = 0; i < pixels.length; i++) // rgb values only
{
    int r = pixels[i] & 0xFF;
    int g = (pixels[i] >> 8) & 0xFF;
    int b = (pixels[i] >> 16) & 0xFF;
    pixels[i] = new Color(r, g, b).getRGB();
}


// convert int[] into byte[] so it can be sent over the stream
ByteBuffer byteBuffer = ByteBuffer.allocate(pixels.length * 4);
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
IntBuffer intBuffer = byteBuffer.asIntBuffer();
intBuffer.put(pixels);
byte[] toSend = byteBuffer.array();

// write to client using already setup BufferedOutputStream
bosToClient.write(toSend, 0, toSend.length);
bosToClient.flush();

这就是我在Android设备上读取字节并尝试构建Bitmap ... imageBytes的方式,这是我的设备从计算机中收到的byte[]

// convert to the original int[] of pixels
ByteBuffer byteBufferAfter = ByteBuffer.wrap(imageBytes);
byteBufferAfter.order(ByteOrder.LITTLE_ENDIAN);
IntBuffer intBufferAfter = byteBufferAfter.asIntBuffer();
int[] framePixels = new int[intBufferAfter.limit()];
intBufferAfter.get(framePixels);

// Create bitmap
Bitmap frameBitmap = Bitmap.createBitmap(framePixels, 0, 176, 176, 144, Bitmap.Config.ARGB_8888);
frameBitmap.copyPixelsFromBuffer(IntBuffer.wrap(framePixels));

然而,这会导致图像清晰显示不正确。

作为BufferedImage发送的byte[]原始ColorModel: #pixelBits = 24 numComponents = 3 color space = java.awt.color.ICC_ColorSpace@50cbc42f transparency = 1 has alpha = false isAlphaPre = false minX = 0 minY = 0 width = 176 height = 144 sampleModelTranslateX = 0 sampleModelTranslateY = 0 numBands = 3 numDataElements = 3 parent = null 具有以下属性...

scanlines

如果提供任何帮助,则byte[]的数量为528。

解码出了什么问题?我已经尝试过几乎所有的东西而且无法弄清楚。

另外,我必须使用BitmapFactory.decodeStream发送图像。我无法使用img { -webkit-filter: grayscale(100%); /* Chrome, Safari, Opera */ -moz-filter: brightness(100%); filter: grayscale(100%); } img:hover { -webkit-filter: grayscale(50%); /* Chrome, Safari, Opera */ -moz-filter: brightness(50%); filter: grayscale(50%); } (它太慢了)

我的设备输出的屏幕截图...

working colour

working colour 2

0 个答案:

没有答案