相机未returing回我捕捉到的图像 [英] Camera is not returing back me captured image

查看:126
本文介绍了相机未returing回我捕捉到的图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的工作产生图像中效果的Andr​​oid应用程序。我想我的应用程序的用户有两个选择。

I'm working on an android app that produces effects in images. I want the users of my app to have two options.

1),他们可以选择从画廊的图片

1) They can choose pictures from Gallery

2),它们可以捕获从相机新照片

2) They can capture a new photo from camera

下面是我如何完成上述两项任务:

Here is how I'm accomplishing the aforementioned two tasks:

Button takePhotoFromCameraButton;
Button chooseFromGalleryButton;


String imagePath = Environment.getExternalStorageDirectory().getAbsolutePath() + System.currentTimeMillis() + "_image.jpg";
File imageFile = new File(imagePath);
imageUri = Uri.fromFile(imageFile);

在两个按钮,我传球同样onClickListner。

In both buttons, I'm passing the same onClickListner.

    @Override
public void onClick(View clickedView) {

    int clickedViewId = clickedView.getId();

    switch(clickedViewId) {
        case R.id.takeFromCamera:
            Intent imageCaptureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            imageCaptureIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageUri);
            startActivityForResult(imageCaptureIntent,0);
            break;
        case R.id.chooseFromGallery:
            Intent choosePictureIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(choosePictureIntent, 1);
            break;
        default:
            // As we have only two buttons, and nothing else can be clicked except the buttons. So no need to put
            // code in the "DEFAULT CASE"
    }
}

和我捕捉来自两个结果,按以下方式:

And I'm capturing the result from both, the following way:

    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    switch(requestCode) {
        case 0:
            Intent cameraIntent = new Intent(MainOptionsActivity.this,ApplyEffectsActivity.class);
            cameraIntent.putExtra("imageFileUri", imageUri);
            startActivity(cameraIntent);
            break;
        case 1:
            Uri imageUriForGallery = intent.getData();
            Intent galleryIntent = new Intent(MainOptionsActivity.this,ApplyEffectsActivity.class);
            galleryIntent.putExtra("imageFileUri", imageUriForGallery);
            startActivity(galleryIntent);
            break;
    }

}

}

有关图库图片的按钮正常工作。但是,当我用pressing第二个按钮调用摄像头和捕获图像,没有任何反应。它停留在那里,直到我取消了摄像头,回到我的应用程序。我没有收到任何图像回来了!
凡我错了?不要介意这个愚蠢的问题,我只是在android的初学者! (

The button for gallery images works fine. But when I invoke camera by pressing the second button and capture the image, nothing happens. It stays there till I cancel the camera and come back to my app. I don't receive any image back! Where I'm wrong? Don't mind this silly question, I'm just a beginner in android! :(

推荐答案

当我实现了我的,我做了这样的工作,通过一个片段:

When I implemented mine, I made it work this way through a fragment:

public class ConcertFragment extends Fragment implements SurfaceHolder.Callback {

ImageView toto;
ToggleButton btnFlashlight;
RayMenu menu;
View rootView;

private Camera cam;
boolean hasCamera;
Parameters params;
private int REQUEST_IMAGE_CAPTURE;
Bitmap photo;
Uri imageUri;

public ConcertFragment() {
}

public void startCameraIntent() {
    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);  
    startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE); 
}

@Override
public void onStart() {
    super.onStart();
    SurfaceView preview = (SurfaceView)getView().findViewById(R.id.background);
    SurfaceHolder mHolder = preview.getHolder();
    mHolder.addCallback(this);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.concert, menu);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getCamera();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    rootView = inflater.inflate(R.layout.fragment_concert, container, false); 
    toto = (ImageView) rootView.findViewById(R.id.toto);
    return rootView;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode != 0)
    {
        if (requestCode == REQUEST_IMAGE_CAPTURE) {
            Bitmap photo = (Bitmap) data.getExtras().get("data");
            toto.setImageBitmap(photo);

            View content = rootView.findViewById(R.id.toto);
            content.setDrawingCacheEnabled(true);

                Bitmap bitmap = content.getDrawingCache();
                File root = Environment.getExternalStorageDirectory();
                File cachePath = new File(root.getAbsolutePath() + "/DCIM/Camera/image.jpg");
                try {
                    cachePath.createNewFile();
                    FileOutputStream ostream = new FileOutputStream(cachePath);
                    bitmap.compress(CompressFormat.JPEG, 100, ostream);
                    ostream.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }

                Intent share = new Intent(Intent.ACTION_SEND);
                share.setType("image/*");
                share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(cachePath));
                startActivity(Intent.createChooser(share,"Share via"));
        }
        else {
            cam.release();
        }
    }
}    

// Get the camera
   private void getCamera() {
        if (cam != null) {
            try {
                cam = Camera.open();
                params = cam.getParameters();
                cam.startPreview();
                hasCamera = true;

            } catch (RuntimeException e) {
                Log.e("Camera Error. Failed to Open. Error: ", e.getMessage());
                cam.release();
            }
        }
   } 

希望这有助于:)只要问如果您需要了解更多信息。

Hope this helps :) Just ask if you need more information.

如何用一个活动做到这一点,而不是片段

public class MyCameraActivity extends Activity {
    private static final int CAMERA_REQUEST = 1888; 
    private ImageView imageView;

    @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) {
                Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
                startActivityForResult(cameraIntent, CAMERA_REQUEST); 
            }
        });
    }

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {  
            Bitmap photo = (Bitmap) data.getExtras().get("data"); 
            imageView.setImageBitmap(photo);
        }  
    } 
}

这篇关于相机未returing回我捕捉到的图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆