【发布时间】:2019-05-29 12:58:26
【问题描述】:
我有返回 RAW 640x480 BGR 的捕获设备。支持它的文档只有 .net/C# 代码示例。
这是他们在 .net SDK 中的示例代码
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0,
bmp.Width,
bmp.Height),
ImageLockMode.WriteOnly,
bmp.PixelFormat);
Marshal.Copy(faceImage, 0, bmpData.Scan0, faceImage.Length);
bmp.UnlockBits(bmpData);
这是我在 Java 中得到的最接近的,但颜色仍然不正确
int nindex = 0;
int npad = (raw.length / nHeight) - nWidth * 3;
BufferedImage bufferedImage = new BufferedImage(nWidth, nHeight, BufferedImage.TYPE_4BYTE_ABGR);
DataBufferByte dataBufferByte = ((DataBufferByte) bufferedImage.getRaster().getDataBuffer());
byte[][] bankData = dataBufferByte.getBankData();
byte brgb[] = new byte[(nWidth + npad) * 3 * nHeight];
System.arraycopy(raw, 0, brgb, 0, raw.length);
for(int j = 0; j < nHeight - 1; j++)
{
for(int i = 0; i < nWidth; i++)
{
int base = (j * nWidth + i) * 4;
bankData[0][base] = (byte) 255;
bankData[0][base + 1] = brgb[nindex + 1];
bankData[0][base + 2] = brgb[nindex + 2];
bankData[0][base + 3] = brgb[nindex];
nindex += 3;
}
nindex += npad;
}
ImageIO.write(bufferedImage, "png", bs);
红色和绿色似乎颠倒了。感谢您的反馈以解决此问题。谢谢!
【问题讨论】:
-
欢迎来到 Stack Overflow!看起来您可能需要学习使用调试器。请帮助自己一些complementary debugging techniques。如果您之后仍有问题,请edit您的问题更具体地说明您需要什么帮助。
标签: java c# .net image-processing bufferedimage