используя ACTION_IMAGE_CAPTURE, чтобы сделать снимок, и setImageBitmap, чтобы отобразить его - PullRequest
2 голосов
/ 03 июня 2011

РЕДАКТИРОВАТЬ Я обновил код, чтобы отразить изменения, предложенные в обоих ответах, к сожалению, теперь мое приложение закрывается. ошибка указана внизу

это мой класс камеры / изображения в полном объеме (за исключением import с), этот класс должен делать снимок, отображать его на экране и позволять другому классу иметь строковый путь к изображению для использования в качестве приложение. он делает снимок в порядке, он отправляет его по электронной почте, но я не могу понять, как заставить его отображать изображение после его съемки. я знаю, что там есть какой-то небрежный код (как в onActivityResult), но все, кроме

Bitmap bm = BitmapFactory.decodeFile(image_string);
imageview.setImageBitmap(bm);

отлично работает, поэтому мне очень интересно найти решение. Любой другой совет, который у вас есть, о том, как убрать это, также был бы более чем желанен, он был просто напичкан несколькими источниками.

public class LooksLike extends Activity
    {       
    Button camera;
    Intent intent;
    static String image_string;
    ImageView imageview;
    public void onCreate (Bundle savedInstanceState)
        {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.lookslike);
        camera = (Button) findViewById(R.id.camera);
        imageview = (ImageView) findViewById(R.id.debris_view);
        camera.setOnClickListener(new View.OnClickListener()
            {
            public void onClick(View v)
                {
                takePhoto();
                }
            });
        }

    public void takePhoto()
        {
        intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(this)) ); 
        startActivityForResult(intent, 1);
        Bitmap bm = BitmapFactory.decodeFile(image_string);
        imageview.setImageBitmap(bm);
        }

    private File getTempFile(Context context)
        {
        File path = new File(Environment.getExternalStorageDirectory(), context.getPackageName() );
        if(!path.exists())
            path.mkdir();
        return new File(path, "debris.jpg");
        }

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
    if (resultCode == RESULT_OK)
        {
        switch(requestCode)
            {
            case 1:
            final File file = getTempFile(this);
            try
                {
                Media.getBitmap(getContentResolver(), Uri.fromFile(file) );
                image_string = Uri.fromFile(file).toString();
                Bitmap bm = Bitmap.createScaledBitmap(
                    BitmapFactory.decodeFile(image_string),
                    getResources().getDisplayMetrics().widthPixels,
                    getResources().getDisplayMetrics().heightPixels, 
                    true);
                imageview = (ImageView) findViewById(R.id.debris_view);
              imageview.setImageBitmap(bm);
                }
            catch (FileNotFoundException e)
                {
                Toast.makeText(getApplicationContext(), "file not found exception", Toast.LENGTH_SHORT).show();
                }
            catch (IOException e)
                {
                Toast.makeText(getApplicationContext(), "ioexception", Toast.LENGTH_SHORT).show();
                }
            break;
            }
        }
    }
}

также, вот мой xml-файл:

<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <ImageView  
        android:id="@+id/debris_view"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/icon"
        />
    <Button
        android:id="@+id/camera"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginBottom="20dip"
        android:layout_gravity="center_horizontal|bottom"
        android:padding="12dip"
        android:background="#AA000000"
        android:textColor="#ffffffff"
        android:text="would you like to take a new debris picture?"
        />
</merge>

Ответы [ 3 ]

3 голосов
/ 03 июня 2011

Вам необходимо переместить эти две строки в onActivityResult ():

case 1:
    final File file = getTempFile(this);
    try {
        Media.getBitmap(getContentResolver(), Uri.fromFile(file) );
        image_string = Uri.fromFile(file).toString();
        Bitmap bm = BitmapFactory.decodeFile(image_string);
        imageview.setImageBitmap(bm);
    } catch (FileNotFoundException e) {
        ...

Код в takePhoto() будет выполнен сразу после startActivityForResult() (то есть он не будет ждать завершения вызванной активности).Результат обработки должен быть выполнен в onActivityResult().

1 голос
/ 03 июня 2011

Перемещение

Bitmap bm = BitmapFactory.decodeFile(image_string);
        imageview.setImageBitmap(bm);

из takePhoto в

 try
                        {
                        Media.getBitmap(getContentResolver(), Uri.fromFile(file) );
                        image_string = Uri.fromFile(file).toString();
Bitmap bm = BitmapFactory.decodeFile(image_string);
        imageview.setImageBitmap(bm);
                        }
                    catch (FileNotFoundException e)
0 голосов
/ 22 мая 2012

Вы загружаете изображение, которое, вероятно, слишком велико. Уменьшите изображение, которое вы хотите показать на экране, до меньшего размера, и это должно быть хорошо. LogCat должен показать что-то полезное об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...