我正在开发Android应用。我需要保存一张位图而不会损失质量。
我尝试使用Bitmap的compress()方法,并将质量设置为100。但是这对我来说不起作用,位图丢失了太多的质量。我已经尝试过JPEG和PNG格式。
我还尝试将位图复制到一个ByteBuffer中,然后提取byte[]并使用FileOutputStream进行保存。但是,使用这种方式保存的图像无法显示,只能看到一个空白页面。
我的问题是,有没有办法在SD卡上保存位图而不进行压缩?
编辑:这是我的部分代码。
我检测到的异常是: RuntimeException: 传递结果ResultInfo时出错[...] NullPointerException
编辑2: 我实际上要做的事情是:
我需要用相机拍照,然后在保存之前对其进行处理。之后,我需要将其保存在SD卡中。但图像质量非常重要,我不能以低质量保存它,至少不能太低。
我尝试使用Bitmap的compress()方法,并将质量设置为100。但是这对我来说不起作用,位图丢失了太多的质量。我已经尝试过JPEG和PNG格式。
我还尝试将位图复制到一个ByteBuffer中,然后提取byte[]并使用FileOutputStream进行保存。但是,使用这种方式保存的图像无法显示,只能看到一个空白页面。
我的问题是,有没有办法在SD卡上保存位图而不进行压缩?
编辑:这是我的部分代码。
public class MainActivity extends ActionBarActivity {
[...]
@Override
protected void onActivityResult(int reqCode, int resCode, Intent handler){
super.onActivityResult(reqCode, resCode, handler);
if(reqCode == CAPTURE_IDENTIFIER && resCode == Activity.RESULT_OK){
// THis is that I have tested.
// Object o = handler.getData();
// Object o2 = handler.getExtras().getParcelable("data");
// Object o3 = handler.getExtras().get("data");
// Object o4 = handler.getParcelableExtra("data");
//
prepareCapture();
startActivityForResult(cameraHandler, CAPTURE_IDENTIFIER);
}
}
private void initCamera(){
cameraHandler = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraHandler.putExtra("return-data", true);
}
private void prepareCapture(){
currentPhotoName = getNextImageIdentifier() + IMG_BASE_NAME;
File image = new File(capturesFolder, currentPhotoName);
Uri uriImage = Uri.fromFile(image);
cameraHandler.putExtra(MediaStore.EXTRA_OUTPUT, uriImage);
}
}
我检测到的异常是: RuntimeException: 传递结果ResultInfo时出错[...] NullPointerException
编辑2: 我实际上要做的事情是:
我需要用相机拍照,然后在保存之前对其进行处理。之后,我需要将其保存在SD卡中。但图像质量非常重要,我不能以低质量保存它,至少不能太低。