Java 从字节[]创建位图
我正试图在我的Android设备上从提供的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(
字节[]
构建位图
字节[]
是从我的计算机发送的,它有一个正常的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