在我的代码中,我有自己的相机,它可以正常工作并正确保存图片。首先我打电话:
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,是否有可能因为我使用的是三星而发生?在这个线程中,他们说三星有这个问题:从相机捕获图像并在活动中显示