我一直在构建一个使用CameraKit by Flurge
的项目,我有一个相当讨厌的问题。我实际上并不知道如何拍照。我有一个快门按钮,按下时应该激活一个OnPicturetaken Listener
,但我不知道它是否有效,或者它是否被保存。当我单击手机上的快门按钮时,logcat会返回图片的尺寸,即13 Mp,但它并没有保存。
这是按下快门按钮时运行的代码:
cameraView.captureImage();
cameraView.setCameraListener(new CameraListener() {
@Override
public void onPictureTaken(byte[] picture) {
super.onPictureTaken(picture);
Bitmap result = BitmapFactory.decodeByteArray(picture, 0, picture.length);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
result.compress(Bitmap.CompressFormat.JPEG, 40, stream);
}
});
我尝试将JPEG质量设置为40以减少应用程序在处理图像时的冻结,但它根本没有帮助。我得到的唯一输出是图像全分辨率的logcat,即13Mp。
答案 0 :(得分:2)
是否正在保存
如果通过"已保存",您的意思是写入磁盘或网络,则在您的问题中没有任何代码可以执行此操作。
这是按下快门按钮时运行的代码:
如果要将图像保存到磁盘,请分叉线程并将字节写入FileOutputStream
,其中FileOutputStream
指向您希望图像存储在{{3}的任何位置}或internal storage。您无需解码byte[]
;它已经是JPEG格式,因此您只需编写字节。
答案 1 :(得分:0)
您需要在侦听器下面调用captureImage();
在听众设置之前,您似乎正在捕获图像。它看起来应该是这样的。
cameraView.setCameraListener(new CameraListener() {
@Override
public void onPictureTaken(byte[] picture) {
super.onPictureTaken(picture);
Bitmap result = BitmapFactory.decodeByteArray(picture, 0,picture.length);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
result.compress(Bitmap.CompressFormat.JPEG, 40, stream);
}
});
cameraView.captureImage();