Intent調用系統拍照程式,返回圖片太小的問題

來源:互聯網
上載者:User

標籤:intent調用系統拍照程式   調用相機返回照片路徑   調用相機返回照片太小   

之前採用的方式(返回的照片會被壓縮,不能達到預期效果):

Intent intent = new Intent();
Intent intent_camera = getPackageManager()
.getLaunchIntentForPackage("com.android.camera");
if (intent_camera != null) {
intent.setPackage("com.android.camera");
}
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 100);


回調:(在返回的data中區資料,然後儲存,然後再拿到路徑,這樣圖片是已經壓縮了的)

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("TAG", "requestCode" + requestCode + " ,resultCode" + resultCode
+ data);
if (requestCode == 100 && resultCode == Activity.RESULT_OK
&& null != data) {
// 照相返回介面
String sdState = Environment.getExternalStorageState();
if (!sdState.equals(Environment.MEDIA_MOUNTED)) {
Toast.makeText(getApplicationContext(), "未找到SDK",
Toast.LENGTH_LONG).show();
Log.d("TAG", "sd card unmount");
return;
}
new DateFormat();
String name = DateFormat.format("yyyyMMdd_hhmmss",
Calendar.getInstance(Locale.CHINA))
+ ".jpg";
Log.d("TAG", "name.........." + name);
Bundle bundle = data.getExtras();
// 擷取相機返回的資料,並轉換為圖片格式
Bitmap bitmap;
String filename = null;
bitmap = (Bitmap) bundle.get("data");
FileOutputStream fout = null;
// 定義檔案儲存體路徑
File file = new File("/sdcard/e_community/");
if (!file.exists()) {
file.mkdirs();
}
filename = file.getPath() + "/" + name;
try {
fout = new FileOutputStream(filename);
// 對圖片進行壓縮
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fout);
// FileOutputStream outputStream = new FileOutputStream(filename); // 檔案輸出資料流  
//        outputStream.write(data); // 寫入sd卡中  
//        outputStream.close(); // 關閉輸出資料流  
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
fout.flush();
fout.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Log.d("TAG", "相片路徑" + filename);

}



解決圖片太小的問題,就是在啟動相機的時候設定好照片儲存的路徑以及名稱,這樣data中就不會返回資料而是null,這樣就可以根據自己設定的路徑已經設定的名稱通過BitmapFactory.decodeFile(imageUrl.get(j),option);擷取到照片。

啟動代碼如下:

private String camera_path = Environment.getExternalStorageDirectory().toString()+"/e_community/";儲存的路徑

private String camera_photo_name;//儲存的名稱


Uri mOutPutFileUri;

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File path1 = new File(PhotoUtil.camera_path);
 if(!path1.exists()){
  path1.mkdirs();
 }
 camera_photo_name=System.currentTimeMillis()+".png";
 File file = new File(path1,camera_photo_name);
 mOutPutFileUri = Uri.fromFile(file);
 intent.putExtra(MediaStore.EXTRA_OUTPUT, mOutPutFileUri);

 startActivityForResult(intent, 111);


回調:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("TAG", "requestCode" + requestCode + " ,resultCode" + resultCode
+ data);
if (requestCode == 111&&resultCode==Activity.RESULT_OK) {
// 照相返回介面
String filename = PhotoUtil.camera_path+ "/" + camera_photo_name;
Log.d("TAG", "相片路徑" + filename);

}

}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.