栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

Android中Image的简单实例详解

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android中Image的简单实例详解

在多媒体应用中,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对象可以访问相关数据。

闲话少说,直接看例子,这是一本英文书上的,觉得写的很好,自己翻译了一下,并加入了很多注释。以备查询。

package demo.camera; 
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) { 
  
  
  
 //在这里启动Camera。 
 //Camera中定义了一个Intent-Filter,其中Action是android.media.action.IMAGE_CAPTURE 
 //我们使用的时候,最好不要直接使用这个,而是用MediaStore中的常量ACTION_IMAGE_CAPTURE. 
 //这个常量就是对应的上面的action 
 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

 //这里我们插入一条数据,ContentValues是我们希望这条记录被创建时包含的数据信息 
 //这些数据的名称已经作为常量在MediaStore.Images.Media中,有的存储在MediaStore.MediaColumn中了 
 //ContentValues values = new ContentValues(); 
 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); //这样就将文件的存储方式和uri指定到了Camera应用中 
  
 //由于我们需要调用完Camera后,可以返回Camera获取到的图片, 
 //所以,我们使用startActivityForResult来启动Camera    
 startActivityForResult(intent, RESULT_CODE); 
  
      } 
    }); 
  } 
   
  @Override 
  public void onActivityResult(int requestCode, int resultCode, Intent data){ 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode == RESULT_CODE){ 
      //说明是由Camera返回的数据 
      //由Camera应用返回的图片数据是一个Camera对象,存储在一个名为data的extra域 
      //然后将获取到的图片存储显示在ImageView中 

      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.inSampleSize = 8; 
 op.inJustDecodeBounds = true; 
 //Bitmap pic = BitmapFactory.decodeFile(imageFilePath, op);//调用这个方法以后,op中的outWidth和outHeight就有值了 
 //由于使用了MediaStore存储,这里根据URI获取输入流的形式 
 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; //注意这里,一定要设置为false,因为上面我们将其设置为true来获取图片尺寸了 
 pic = BitmapFactory.decodeStream(this.getContentResolver() 
     .openInputStream(imageFilePath), null, op); 
 imageView.setImageBitmap(pic); 
      } catch (Exception e) { 
 e.printStackTrace(); 
      }  
    } 
  } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/156940.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号