要使用拍照功能必須啟用的應用程式許可權
要存取檔必須啟用的應用程式許可權
public class CaptureImageActivity extends Activity { private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100; private Uri uri; // 建立 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Intent imageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 資料夾不存在就建立 File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages"); imagesFolder.mkdirs(); // 設定照片路徑與檔名 File image = new File(imagesFolder, "image_001.jpg"); uri = Uri.fromFile(image); imageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(imageIntent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) { switch (resultCode) { case RESULT_CANCELED: break; case RESULT_OK: setupImage(uri, 320, 240, 100); break; } } } /** * 維持長寬比例縮放Bitmap * * @param bitmap * @param maxWidth * @param maxHeight * @return */ public Bitmap resizeBitmap(Bitmap bitmap, int maxWidth, int maxHeight) { int originWidth = bitmap.getWidth(); int originHeight = bitmap.getHeight(); if (originWidth < maxWidth && originHeight < maxHeight) { return bitmap; } int width = originWidth; int height = originHeight; if (originWidth > maxWidth) { width = maxWidth; double i = originWidth * 1.0 / maxWidth; height = (int) Math.floor(originHeight / i); bitmap = Bitmap.createScaledBitmap(bitmap, width, height, false); } if (height > maxHeight) { height = maxHeight; bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height); } return bitmap; } /** * 載入影像檔並縮放縮影像檔大小與壓縮影像品質 * * @param uri * @param maxWidth * @param maxHeight * @return */ public Bitmap setupImage(Uri uri, int maxWidth, int maxHeight, int compress) { Bitmap tempBitmap = null; Bitmap bm = null; try { tempBitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri)); // 縮族圖片 bm = resizeBitmap(tempBitmap, maxWidth, maxHeight); Log.v("setupImage", "影像檔載入與縮放成功"); FileOutputStream out = new FileOutputStream(uri.getPath()); bm.compress(Bitmap.CompressFormat.JPEG, compress, out); out.close(); } catch (Exception e) { Log.e("setupImage", "無法縮放或壓縮影像檔", e); } return bm; } }
沒有留言:
張貼留言