【发布时间】:2012-09-06 11:35:11
【问题描述】:
我编写了一个代码来找到相机中最亮的像素(激光点)l 取景器并在该坐标处画一个圆。
理想情况下,圆圈应该在点上。但由于一些问题(可能是屏幕 分辨率/编码错误)圆圈有点移位。
我附上截图和代码。
如果您能查明错误或提供您的 宝贵的建议。
问题:
- 点已正确跟踪,但坐标不准确(如屏幕截图所示)
- 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);
}
【问题讨论】:
-
一个复杂到需要下载源代码的问题是您应该花钱请顾问来帮助解决的问题。如果不检查您的来源,我猜问题是您使用屏幕坐标而不是图片坐标进行绘图; Android 可以缩放您的图像以适应屏幕,这将为您提供不同的坐标系。直接绘制到包含图像的位图中(您找到最亮像素的位置)可能会获得更好的结果。
-
通过将屏幕截图放在 zip 中而不是将其嵌入到您的问题中,您对自己没有多大帮助。
-
这就是我正在做的事情(我认为)
标签: java android image-processing