1
我想从通过onPreviewFrame从相机中获取的图像中绘制'Y'组件作为灰度。Canvas.drawBitmap用黄色的色调绘制图像
我使用Canvas.drawBitmap的版本,该版本以“颜色”数组作为参数。 Android文档没有提及Color的格式,所以我假设ARGB 8888.
我确实看到了一个图像,但它显示出奇怪的黄色色调。
这里是我下面的代码:
public void onPreviewFrame(byte[] bytes, Camera camera) {
Canvas canvas = null;
try {
synchronized(mSurfaceHolder) {
canvas = mSurfaceHolder.lockCanvas();
Size size = camera.getParameters().getPreviewSize();
int width = size.width;
int height = size.height;
if (mHeight * mWidth != height * width)
{
mColors = new int[width * height];
mHeight = height;
mWidth = width;
Log.i(TAG, "prewviw size = " + width + " x " + height);
}
for (int x = 0; x < width; x ++) {
for (int y = 0; y < height; y++) {
int yval = bytes[x + y * width];
mColors[x + y * width] = (0xFF << 24) | (yval << 16) | (yval << 8) | yval;
}
}
canvas.drawBitmap(mColors, 0, width, 0.f, 0.f, width, height, false, null);
}
}
finally {
if (canvas != null) {
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
我一直在使用Canvas.drawBitmap的另一个版本,需要一个位图作为参数也试过。我以类似的方式构建了相同阵列的位图,并且我告诉它明确使用ARGB。但它仍然最终被染成黄色!
我在这里做错了什么?
也许你的相机处于棕褐色模式? –
以下行对于负值是错误的: int yval = bytes [x + y * width]; 我正在将一个带符号的字节提升为一个整数,然后在其上进行字节移位。添加一个&0xFF解决了这个问题。 – kos
这条评论对我有帮助,但是图片以灰色来显示!如果你回答了你自己的问题,这很有用,因为我花了一段时间才发现评论。 :-) –