我正在使用这种方法将从相机拍摄的图像保存到内部存储器中
public String saveImage(Bitmap myBitmap) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
myBitmap.compress(Bitmap.CompressFormat.JPEG,100,bytes);
File wallpaperDirectory = new File(
Environment.getExternalStorageDirectory() + IMAGE_DIRECTORY);
// have the object build the directory structure, if needed.
if (!wallpaperDirectory.exists()) {
wallpaperDirectory.mkdirs();
}
try {
File f = new File(wallpaperDirectory, Calendar.getInstance()
.getTimeInMillis() + ".jpg");
f.createNewFile();
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
MediaScannerConnection.scanFile( getActivity(),
new String[]{f.getPath()},
new String[]{"image/jpeg"}, null);
fo.close();
Log.d("TAG", "File Saved::--->" + f.getAbsolutePath());
return f.getAbsolutePath();
} catch (IOException e1) {
e1.printStackTrace();
}
return "";
}
存储的图像大小约为15.24 kB,但是在不使用我的应用程序的情况下从相机拍摄的同一图像的大小为3.59MB。 我需要从我的应用程序中存储图像,而无需压缩或压缩程度较小。
我在做什么错了?
编辑
我猜这是由于onActiciyResult的这一部分引起的:
if (requestCode == 7 && resultCode == RESULT_OK) {
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
selectedFilePath = saveImage(bitmap);
fotoActual.setImageBitmap(bitmap);
nombreArchivo.setText( selectedFilePath);
dialog = ProgressDialog.show(getActivity(),"","Subiendo foto ...",true);
new Thread(new Runnable() {
@Override
public void run() {
//creating new thread to handle Http Operations
uploadFile(selectedFilePath);
}
}).start();
}
使用Bitmap bitmap = (Bitmap) data.getExtras().get("data");
返回缩略图而不是图像。
答案 0 :(得分:1)
启动相机时,您必须从文件中指定URI,如下所示:
Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File wallpaperDirectory = new File(
Environment.getExternalStorageDirectory() + IMAGE_DIRECTORY);
myFile = new File(wallpaperDirectory, "MyPhoto.jpeg");
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(myFile)); --> you have to do this
startActivityForResult(i, CONTENT_REQUEST);
这样做,您不需要在Activity结果上调用saveImage。