我试图在我的Android设备上从提供的Bitmap
构建byte[]
。
正在从我的计算机发送byte[]
,该计算机具有作为服务器运行的普通Java程序。一旦我的Android设备连接,Java程序就开始从我的网络摄像头抓取BufferedImage
,然后将BufferedImage
的内容作为byte[]
发送到我的Android设备。
这就是我将计算机数据从我的计算机发送到我的Android设备的方式...... frame
是BufferedImage
,其大小始终为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%);
}
(它太慢了)
我的设备输出的屏幕截图...