【问题标题】:How to capture and preview display to image view in camera 2 api fragment?如何在相机 2 api 片段中捕获和预览显示到图像视图?
【发布时间】:2020-06-20 15:39:40
【问题描述】:

我正在编写一个 Android 应用程序,我需要在其中显示通过相机捕获的图像。我正在尝试捕获图像,但是如何通过 camreaid 捕获图像并在屏幕上显示捕获的图像。谁能帮我解决这个问题。

提前致谢

【问题讨论】:

    标签: java android-studio


    【解决方案1】:

    这是一个示例 Activity,它将启动相机应用,然后检索图像并显示它。

    package edu.gvsu.cis.masl.camerademo;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ImageView;
    
    public class MyCameraActivity extends Activity
    {
        private static final int CAMERA_REQUEST = 1888; 
        private ImageView imageView;
        private static final int MY_CAMERA_PERMISSION_CODE = 100;
    
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            this.imageView = (ImageView)this.findViewById(R.id.imageView1);
            Button photoButton = (Button) this.findViewById(R.id.button1);
            photoButton.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    if (checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
                    {
                        requestPermissions(new String[]{Manifest.permission.CAMERA}, MY_CAMERA_PERMISSION_CODE);
                    }
                    else
                    {
                        Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
                        startActivityForResult(cameraIntent, CAMERA_REQUEST);
                    } 
                }
            });
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
        {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            if (requestCode == MY_CAMERA_PERMISSION_CODE)
            {
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
                {
                    Toast.makeText(this, "camera permission granted", Toast.LENGTH_LONG).show();
                    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
                    startActivityForResult(cameraIntent, CAMERA_REQUEST);
                }
                else
                {
                    Toast.makeText(this, "camera permission denied", Toast.LENGTH_LONG).show();
                }
            }
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data)
        {  
            if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK)
            {  
                Bitmap photo = (Bitmap) data.getExtras().get("data"); 
                imageView.setImageBitmap(photo);
            }  
        } 
    }
    

    请注意,相机应用程序本身使您能够查看/重新拍摄图像,一旦图像被接受,活动就会显示它。

    这是上述活动使用的布局。它只是一个 LinearLayout,包含一个 ID 为 button1 的 Button 和一个 ID 为 imageview1 的 ImageView:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/photo"></Button>
        <ImageView android:id="@+id/imageView1" android:layout_height="wrap_content" android:src="@drawable/icon" android:layout_width="wrap_content"></ImageView>
    
    </LinearLayout>
    

    最后一个细节,一定要补充:

    <uses-feature android:name="android.hardware.camera"></uses-feature> 
    

    如果相机对于您的应用功能来说是可选的。确保在权限中将 require 设置为 false。像这样

    <uses-feature android:name="android.hardware.camera" android:required="false"></uses-feature>
    

    到您的 manifest.xml。

    【讨论】:

    • 我正在使用摄像头 2 api,该代码仍然适用于摄像头 2 api 吗?顺便说一句,谢谢兄弟
    猜你喜欢
    • 2015-05-03
    • 1970-01-01
    • 2014-01-05
    • 2012-04-20
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    相关资源
    最近更新 更多