カメラのファインダーで最も明るいピクセル(レーザードット)を見つけ、その座標に円を描くコードを書きました。
円がドット上にあるのが理想的です。しかし、何らかの問題(おそらく画面解像度/コーディングエラー)により、円は少しずれています。
スクリーンショットとコードを添付しています。
エラーを特定するか、貴重な提案をしていただければ幸いです。
問題:
- ドットは適切に追跡されますが、座標は正確ではありません (スクリーンショットのように)
- Fireworks モードは S2 では機能しませんが、Galaxy Ace では機能します。
- Motorolla Android フォンでアプリがクラッシュする
コード + スクリーンショット http://wikisend.com/download/553910/re41postqueryregardingdecodeyuv420spmrgbdatamyuvd.zip
protected void onDraw(Canvas canvas) {
if (mBitmap != null)
{
int canvasWidth = canvas.getWidth();
int canvasHeight = canvas.getHeight();
int newImageWidth = canvasWidth;
int marginWidth = (canvasWidth - newImageWidth)/2;
// Convert from YUV to RGB
decodeYUV420SP(mRGBData, mYUVData, mImageWidth, mImageHeight);
int maxR=255;x=0;y=0; int k=0;
for (int i = 0; i < mRGBData.length; i++) {
if((((mRGBData[i] >> 16) & 0x000000FF)+((mRGBData[i] >> 8) & 0x000000FF)+((mRGBData[i]) & 0x000000FF))>maxR)
{
maxR=(mRGBData[i] >> 16) & 0x000000FF;
maxR+=(mRGBData[i] >> 8) & 0x000000FF;
maxR+=(mRGBData[i] ) & 0x000000FF;
y=i%mImageWidth;
x=i/(mImageWidth);
}
}
String status= "Laser coords: ("+maxR+", "+y+")";
canvas.drawText(status, marginWidth+10, 60, mPaintYellow);
canvas.drawCircle(y, x, 10, mPaintYellow);
}
super.onDraw(canvas);
}