0

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

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

但它不起作用,我第一次按下拍摄按钮时,它会保存文件并继续显示相机。有时当我采取第二个应用程序停止。

我也试过这个:

  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:在蓝线上,我按下了拍摄按钮

在此处输入图像描述

NullPointerException,是否有可能因为我使用的是三星而发生?在这个线程中,他们说三星有这个问题:从相机捕获图像并在活动中显示

4

1 回答 1

1

您没有收到 NullPointerException,而是出现内存不足错误。

有一系列关于如何有效加载位图的非常有用的文章。您唯一需要知道的是目标显示尺寸,因此您将知道要缩小到哪个尺寸。

如果应用程序在分配 5MB 时崩溃,则意味着您已经在窥视内存使用情况。请查看这个关于内存管理的Android 演示文稿。

于 2013-09-26T11:31:11.480 回答