在Android上捕获图像

时间:2013-10-05 16:43:11

标签: android

我正在尝试在Android上捕获图像并将其显示在图像视图上; 活动开始时调用的捕获意图,图像视图与调用捕获Intent的活动相同 当我运行应用程序时,相机捕获图像TWICE然后在图像视图中显示图像?!任何想法为什么?我该如何解决?

> Activity.java

public class View extends Activity{
    ImageView imgview;
    Bitmap Bmp;
    final static int cameraData = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera);
        imgview = (ImageView) findViewById(R.id.imgview);
        Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

        startActivityForResult(i, cameraData);


    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            Bmp = (Bitmap) extras.get("data");
            imgview.setImageBitmap(Bmp);    }


    }}

> camera.xml

   <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
    xmlns:opencv="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >


    <ImageView
        android:id="@+id/imgview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:contentDescription="Image view"
         android:src="@drawable/ic_launcher"
      />

</FrameLayout>

3 个答案:

答案 0 :(得分:0)

你最好在活动时给startActivityForResult()打电话(例如按一下按钮)。

不是直接调用onCreate(),而是在按钮点击内添加一个按钮并启动相机意图。

答案 1 :(得分:0)

基本上只是一个猜测,但我认为您的活动onCreate方法也是在相机拍完第一张照片后调用的(!?)尝试类似

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.camera);
    imgview = (ImageView) findViewById(R.id.imgview);

    if(!getIntent.hasExtra("data")){
        Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(i, cameraData);
    }
}

我对此不太确定,现在无法测试一些东西(这里没有安装sdks),但我希望它有所帮助!

答案 2 :(得分:0)

我正在主持您的代码并且看不到任何内容,除了相机应用程序之外我看起来很熟悉。

以下是Camera Apps

的指南

乍一看,您可以执行以下操作:

  1. 您获得Camera个实例和CameraPreview(一个FrameLayout),并将预览放入您的布局中。
  2. 要捕获图像(无论您在应用程序中触发此图像),都可以使用Camera.takePicture()
  3. 这反过来调用onPictureTaken()的{​​{1}}。在PictureCallback内,您可以获得包含onPictureTaken()的图像数据的文件。
  4. 复制它并享受数据带来的乐趣。