在同一个Activity中显示由自己的Camera拍摄的图像

时间:2013-09-26 10:03:49

标签: android image bitmap camera

在我的代码中,我有自己的相机,它可以正常工作并保存图片。 首先我打电话:

  myCamera.takePicture(null, null, jpegCallBack);

然后我想保存图片并将其显示在我现在的同一活动中。 所以在jpegCallBack中我有(fullPic是我的ImageView):

  try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            fos.write(data);
            fos.close();                                            


            Media.getBitmap(getContentResolver(), Uri.fromFile(pictureFile) );
            String image_string = Uri.fromFile(pictureFile).toString();
            bm = BitmapFactory.decodeFile(image_string);
            fullPic.setImageBitmap(bm);                 
        } catch ...

但它不起作用,我第一次按下Shot按钮,它会保存文件并继续显示相机。有时当我拿第二个app停止时。

我也试过这个:

  fullPic.setImageURI(Uri.fromFile(pictureFile));

它说:“位图太大而无法上传到纹理中(4608x2592,max = 4096x4096)”

如果有必要,我可以缩小显示图像的大小(但不是保存的图像),但我不知道该怎么做。

在AndroidManifest中,我有权使用WRITE和READ。 我的XML是这样的:

  <LL>
     <RL>
       <FrameLayout></FL> for the Camera Preview 
       <Button></> To shot the picture
       <ImageView></> Here I want to show the picture taken
     </RL>
  </LL>

为什么不起作用?有什么想法可以展示吗?我一直在寻找另一个stackoverflow链接,但我找不到解决方案。如果您需要更多数据/代码,请告诉我,我试着总结一下,使其尽可能最清晰。

谢谢!

编辑:

这是jpegCallBack的调用:

  private PictureCallback jpegCallBack = new PictureCallback() {

      @Override
      public void onPictureTaken(byte[] data, Camera camera) 

也许我可以通过某种方式直接从该数据中获取图像。我可以吗? 我试过这种方式,但它打破了:

bm = BitmapFactory.decodeByteArray(data, 0, data.length);
            fullPic.setImageBitmap(bm);

LogCat:在蓝线上我按下拍摄按钮

enter image description here

NullPointerException,是否可能因为我使用三星而发生?在这个帖子中,他们说三星有这个问题:Capture Image from Camera and Display in Activity

1 个答案:

答案 0 :(得分:1)

你没有得到NullPointerException,但内存不足错误。

how to load bitmap efficiently上有一系列非常有用的文章。您唯一需要知道的是目标显示尺寸,因此您将知道缩小尺寸。

如果应用程序在5MB分配时崩溃,则意味着您已经在查看内存使用情况。请查看有关内存管理的Android presentation