在我的代码中,我有自己的相机,它可以正常工作并保存图片。 首先我打电话:
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:在蓝线上我按下拍摄按钮
NullPointerException,是否可能因为我使用三星而发生?在这个帖子中,他们说三星有这个问题:Capture Image from Camera and Display in Activity
答案 0 :(得分:1)
你没有得到NullPointerException,但内存不足错误。
how to load bitmap efficiently上有一系列非常有用的文章。您唯一需要知道的是目标显示尺寸,因此您将知道缩小尺寸。
如果应用程序在5MB分配时崩溃,则意味着您已经在查看内存使用情况。请查看有关内存管理的Android presentation。