Java 从字节[]创建位图

Java 从字节[]创建位图,java,android,image,image-processing,bitmap,Java,Android,Image,Image Processing,Bitmap,我正试图在我的Android设备上从提供的字节[]构建位图 字节[]是从我的计算机发送的,它有一个正常的Java程序作为服务器运行。一旦我的Android设备连接,Java程序开始从我的网络摄像头抓取BuffereImages,然后将BuffereImage的内容作为byte[]发送到我的Android设备 这就是我将数据数组从我的计算机发送到我的Android设备的方式…frame是一个BufferedImage大小始终为176x144 int[] pixels = frame.getRGB(

我正试图在我的Android设备上从提供的
字节[]
构建
位图

字节[]
是从我的计算机发送的,它有一个正常的Java程序作为服务器运行。一旦我的Android设备连接,Java程序开始从我的网络摄像头抓取
BuffereImage
s,然后将
BuffereImage
的内容作为
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();
但是,这会导致图像明显呈现错误

我作为
字节[]
发送的原始
buffereImage
具有以下属性

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
如果有帮助的话,
扫描线的数量是528

解码出了什么问题?我几乎什么都试过了,都想不出来

此外,我必须使用
字节[]
发送图像。我不能使用
BitmapFactory.decodeStream
(它的速度太慢了)

我的设备输出的屏幕截图


深入了解:您是否比较了两侧的颜色值,即基本传输是否如预期那样工作?如果是这样,请放置一张参考图像(彩色2x2网格似乎是个好主意),以便更仔细地确定问题的性质。高级调试通常会让您陷入“无法按我希望的方式工作”@dhike我现在就这样做,并向您报告。@dhke我将在90分钟内做出响应。抱歉。@dhke我可以确认像素是否正确发送到android设备。表示图像像素的服务器和设备int[]内部都有相同的数据。仅在此处猜测,但您发送的BuffereImage具有24位/像素,而您正在使用Bitmap.Config.ARGB_8888配置文件解码图像,其中包括alpha(每像素总计32位)。尝试用正确的RGB配置文件解码,让我们看看会发生什么
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