【发布时间】:2015-04-23 08:31:13
【问题描述】:
我正在开发安卓系统。我需要保存一个不丢失质量的位图。
我已经尝试使用位图的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 卡中。但是画质很重要,低画质的我不能保存,至少不要太低画质。
【问题讨论】:
-
“我需要保存一个不丢失质量的位图”——PNG 是一种无损格式。
-
我测试了 JPEG 和 PNG 格式(Bitmap.compress 的可用格式),质量 = 100,质量都较低。
-
那么您的问题不在于压缩,而在于您如何创建
Bitmap或您如何确定“较低质量”。 -
我只使用对象来检查意图是否返回了我的东西
-
你能开始解释你的代码应该做什么而不是谈论位图。您的代码中没有位图。