onPreviewFrameを介してカメラから取得した画像から「Y」コンポーネントをグレースケールとして描画しようとしています。
'colors'の配列をパラメーターとして受け取るバージョンのCanvas.drawBitmapを使用しています。Androidのドキュメントには、Colorの形式が記載されていないため、ARGB8888を想定しています。
画像が表示されますが、奇妙な黄色の色合いで表示されています。
これが私のコードです:
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を明示的に使用するように指示しました。しかし、それでも黄色に染まってしまいました!
私はここで何が間違っているのですか?