【问题标题】:Accdess data from onPreviewFrame inside a java class to another activity: Android从 java 类中的 onPreviewFrame 访问数据到另一个活动:Android
【发布时间】:2018-03-15 07:48:50
【问题描述】:

我正在用我的安卓相机进行一些图像处理。它是将 NV21 格式的原始数据转换为 RGB 格式,得到每帧的平均 R 值。帧速率设置为 16,手机具有最佳分辨率。有很多转换算法,而我正在使用的算法效果很好。但是,我遇到的问题是我想绘制 R 值与时间的关系图,并且由于我在 onPreviewFrame 中调用转换,我无法弄清楚如何从该方法中获取 R 的值我可以执行图形处理的主要活动。

我的相机类的onPreviewMethod是:

@Override
public void onPreviewFrame(byte[] data, Camera camera){

    //check if data is null
    if (data == null)
        throw new NullPointerException();

    Camera.Size size = camera.getParameters().getPreviewSize();

    //check if size is null
    if(size == null)
        throw new NullPointerException();


    //set resolution of camera view to optimal setting
    int width = size.width;
    int height = size.height;
    Log.d("Resolution ", " "+String.valueOf(width)+" "+String.valueOf(height));


    //call ImageProcess on the data to decode YUV420SP to RGB
    imgAvg = ImageProcessing.decodeYUV420SPtoRedAvg(data, width, height);
    imageIntensity = imgAvg/255;

    //set value of Y on the text view
    TextView valueOfY = (TextView)getRootView().findViewById(R.id.valueY);
    valueY = imgAvg;
    valueOfY.setText(Double.toString(imgAvg));

}

这里的imgAvg变量存储了每一帧的平均R值。日志显示正确的结果,每秒有 16 个结果。我想从绘制图表的主要活动中访问这些数据。正确的方法是什么?我可以以某种方式直接访问这些数据,还是我需要以某种形式存储数据然后从另一个活动中访问它。 (注意,我想避免保存整个视频并进行图像处理。)谢谢。

【问题讨论】:

  • 您可以使用该界面。这很容易!
  • 感谢您的回复。你能详细说明你的建议吗?
  • 好的。请看下面我的回答!

标签: android image-processing camera


【解决方案1】:

例子:

public class Camera {

public interface PreviewReadyCallback {
  void onPreviewFrame(String value1, int value2, Double value3, Float value4, Bitmap value5); // Any value you want to get
}




PreviewReadyCallback mPreviewReadyCallback = null;

public void setOnPreviewReady(PreviewReadyCallback cb) {
    mPreviewReadyCallback = cb;
}

@Override
public void onPreviewFrame(byte[] data, Camera camera){

//check if data is null
if (data == null)
    throw new NullPointerException();

Camera.Size size = camera.getParameters().getPreviewSize();

//check if size is null
if(size == null)
    throw new NullPointerException();


//set resolution of camera view to optimal setting
int width = size.width;
int height = size.height;
Log.d("Resolution ", " "+String.valueOf(width)+" "+String.valueOf(height));


//call ImageProcess on the data to decode YUV420SP to RGB
imgAvg = ImageProcessing.decodeYUV420SPtoRedAvg(data, width, height);
imageIntensity = imgAvg/255;

//set value of Y on the text view
TextView valueOfY = (TextView)getRootView().findViewById(R.id.valueY);
valueY = imgAvg;
valueOfY.setText(Double.toString(imgAvg));
mPreviewReadyCallback.onPreviewFrame(value1, value2, value3, value4, value5);

} 
}

在你的活动中

public class YourActivity extends Activity implements PreviewReadyCallback{
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Camera camera = new Camera();
     camera.setOnPreviewReady(this);
}
@Override
public void onPreviewFrame(String value1, int value2, Double value3, Float value4, Bitmap value5) {

  // Code here!

   }
 }

【讨论】:

    猜你喜欢
    • 2020-08-27
    • 2011-04-02
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    相关资源
    最近更新 更多