2013-10-05 3 views
0

Я пытаюсь захватить изображение на Android и отображать его на изображении; намерение захвата, вызванное при запуске операции, и просмотр изображения в том же самом действии, который вызывает захват Intent , когда я запускаю приложение, камера захватывает изображение TWICE, а затем отображает изображение в режиме просмотра изображений?! любые идеи почему? и как я могу это исправить?Захват изображения на Android

> 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> 

ответ

0

Я играю главную роль в вашем коде и не вижу ничего, что выглядит знакомым с тем, что я исключаю из приложения камеры.

Вот руководство по Camera Apps

На первый взгляд, вы делаете следующее:

  1. Вы получаете Camera экземпляр и CameraPreviewFrameLayout) и поставить предварительный просмотр в макет.
  2. Для захвата изображения (независимо от того, что запускается в вашем приложении) вы используете Camera.takePicture().
  3. Это, в свою очередь, вызывает onPictureTaken() из PictureCallback. В пределах onPictureTaken() вы получаете файл, содержащий данные изображения, с getOutputMediaFile().
  4. Скопируйте его и получайте удовольствие от данных.
+0

Спасибо .. Я попробую это – QAIS

0

лучше называть startActivityForResult() по событию (например нажатие кнопки для например).

Вместо того, чтобы напрямую звонить по телефону onCreate(), добавьте кнопку и запустите камеру внутри кнопки.

+0

Спасибо, но я хочу снимать изображения без указания каких-либо событий. – QAIS

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); 
    } 
} 

Я не очень уверен, что об этом и может» t проверить что-то прямо сейчас (никаких sdks не установлено здесь), но я надеюсь, что это поможет!

+0

Спасибо, но это не сработало. – QAIS

Смежные вопросы