在多媒体应用中,Image是最基础的功能模块,接下来我们将看看在Android中是如何获取和存储Image的。Android内嵌的Image获取和存储功能,可以让我们对于整个媒体框架有个比较全面的了解,同时为audio和video的学习打下基础。
一、Image的获取可以通过调Android自带的Camera应用来完成。该应用含有一个Intent-Filter。通过使用
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent)就可以启动Camera应用了。
二、Image存储,Android系统中含有一个多媒体库,其中包括所有Image、Video、Audio的数据。通过MediaStore对象可以访问相关数据。
java代码:
- package eoe.demo;
- import java.io.File;
- import android.app.Activity;
- import android.content.ContentValues;
- import android.content.Intent;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Environment;
- import android.provider.MediaStore;
- import android.util.Log;
- import android.view.Display;
- import android.view.View;
- import android.widget.Button;
- import android.widget.ImageView;
-
-
-
-
-
-
-
-
- public class MainActivity extends Activity {
- private static final int RESULT_CODE = 1;
- private Button btnCamera;
- private ImageView imageView;
- private Uri imageFilePath;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- imageView = (ImageView)this.findViewById(R.id.imageView);
- btnCamera = (Button)this.findViewById(R.id.camera);
- btnCamera.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
-
-
-
- ContentValues values = new ContentValues(3);
- values.put(MediaStore.Images.Media.DISPLAY_NAME, "testing");
- values.put(MediaStore.Images.Media.DESCRIPTION, "this is description");
- values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
- imageFilePath = MainActivity.this.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
- intent.putExtra(MediaStore.EXTRA_OUTPUT, imageFilePath);
-
-
-
- startActivityForResult(intent, RESULT_CODE);
- }
- });
- }
-
-
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data){
- super.onActivityResult(requestCode, resultCode, data);
- if(resultCode == RESULT_CODE){
-
-
-
- try {
- Bundle extra = data.getExtras();
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Display display = this.getWindowManager().getDefaultDisplay();
-
- int dw = display.getWidth();
- int dh = display.getHeight();
-
-
-
-
-
-
- BitmapFactory.Options op = new BitmapFactory.Options();
-
- op.inJustDecodeBounds = true;
-
-
- Bitmap pic = BitmapFactory.decodeStream(this .getContentResolver().openInputStream(imageFilePath), null, op);
- int wRatio = (int) Math.ceil(op.outWidth / (float) dw);
- int hRatio = (int) Math.ceil(op.outHeight / (float) dh);
- Log.v("Width Ratio:", wRatio + "");
- Log.v("Height Ratio:", hRatio + "");
-
-
-
-
-
-
-
-
- if (wRatio > 1 && hRatio > 1) {
- if (wRatio > hRatio) {
- op.inSampleSize = wRatio;
- } else {
- op.inSampleSize = hRatio;
- }
- }
- op.inJustDecodeBounds = false;
-
- pic = BitmapFactory.decodeStream(this.getContentResolver() .openInputStream(imageFilePath), null, op);
- imageView.setImageBitmap(pic);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
转:http://www.eoeandroid.com/thread-78936-1-1.html
在onActivityResult函数你忘记了这句 super.onActivityResult(requestCode, resultCode, data);附上我的代码(和你的相对应的),你相对应地方如果有问题就对照吧Intent i = new Intent( "android.media.action.IMAGE_CAPTURE"); startActivityForResult(i, Activity.DEFAULT_KEYS_DIALER);//第二个函数super.onActivityResult(requestCode, resultCode, data); ivPic = (ImageView) findViewById(R.id.ivPic); if (useCamera) { if (resultCode == RESULT_OK) { Bundle extras = data.getExtras(); myBitmap = (Bitmap) extras.get("data"); ivPic.setImageBitmap(myBitmap); hasPic = true; ivPic.setVisibility(View.VISIBLE);}}