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
這條評論對我有幫助,但是圖片以灰色來顯示!如果你回答了你自己的問題,這很有用,因爲我花了一段時間才發現評論。 :-) –