国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android編程圖片操作類定義與用法示例【拍照,相冊選圖及裁剪】

2019-10-22 18:15:18
字體:
供稿:網(wǎng)友

本文實例講述了Android編程圖片操作類定義與用法。分享給大家供大家參考,具體如下:

主界面類:拍照及選擇相冊圖片

import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.view.View;import android.widget.Button;import android.widget.ImageView;/** * Android中圖片操作(拍照,相冊圖片選擇及圖片裁剪) * 作者:ldm * 時間:20162016/7/11 09:09 */public class ImageTestActivity extends Activity implements View.OnClickListener {  //拍照  private Button take_photo;  //從相冊中選擇圖片  private Button local_pic;  //圖片展示  private ImageView upload_image;  //定義操作常量  private final static int TAKE_PHOTO_REQUEST = 1;  private final static int LOCAL_PICS_REQUEST = 2;  private final static int UPLOAD_PIC_REQUEST = 3;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_image_test);    //初始化控件及監(jiān)聽事件    initViews();  }  private void initViews() {    this.upload_image = (ImageView) findViewById(R.id.upload_image);    this.take_photo = (Button) findViewById(R.id.take_photo);    this.local_pic = (Button) findViewById(R.id.local_pics);    this.take_photo.setOnClickListener(this);    this.local_pic.setOnClickListener(this);  }  @Override  public void onClick(View view) {    if (view.getId() == R.id.take_photo) {//拍照      //調(diào)用系統(tǒng)拍照In      Intent photoIn = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);      startActivityForResult(photoIn, TAKE_PHOTO_REQUEST);    } else if (view.getId() == R.id.local_pics) {//從相冊選擇      Intent picsIn = new Intent(Intent.ACTION_GET_CONTENT);      picsIn.setType("image/*");//設置選擇的數(shù)據(jù)類型為圖片類型      startActivityForResult(picsIn, LOCAL_PICS_REQUEST);    }  }  //拍照或選擇相冊后,數(shù)據(jù)在這里處理  @Override  protected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (null == data) {      return;    }    switch (requestCode) {      case TAKE_PHOTO_REQUEST:        Bundle bundle = data.getExtras();//獲取到圖片數(shù)據(jù)        if (null != bundle) {          Bitmap bm = bundle.getParcelable("data");          //把圖片展示在ImView上//          upload_image.setImageBitmap(bm);          //對圖片剪          Uri uri = ImageUtils.saveBitmapToSdCard(bm);          startImageCrop(uri);        }        break;      case LOCAL_PICS_REQUEST:        Uri uri = data.getData();//從圖片的Uri是以cotent://格式開頭的        //獲取到圖片        Bitmap bm = ImageUtils.uri2Bitmap(ImageTestActivity.this, uri);        //把圖片展示在ImView上//        upload_image.setImageBitmap(bm);        //把拍照的圖片保存到本地并轉(zhuǎn)換成文件格式的Uri        Uri fileUri = ImageUtils.saveBitmapToSdCard(bm);        //對圖片剪        startImageCrop(fileUri);        break;      case UPLOAD_PIC_REQUEST:        //把裁剪后的圖片展示出來        Bundle b = data.getExtras();        Bitmap bitmap = b.getParcelable("data");        //圖片展示出來        upload_image.setImageBitmap(bitmap);        break;    }  }  /**   * @param   * @description 圖片裁剪   * @author ldm   * @time 2016/7/11 10:07   */  private void startImageCrop(Uri uri) {    Intent intent = new Intent("com.android.camera.action.CROP");    intent.setDataAndType(uri, "image/*");//設置Uri及類型    intent.putExtra("crop", "true");//    intent.putExtra("aspectX", 2);//X方向上的比例    intent.putExtra("aspectY", 1);//Y方向上的比例    intent.putExtra("outputX", 200);//裁剪區(qū)的X方向?qū)?   intent.putExtra("outputY", 100);//裁剪區(qū)的Y方向?qū)?   intent.putExtra("scale", true);//是否保留比例    intent.putExtra("outputFormat", Bitmap.CompressFormat.PNG.toString());    intent.putExtra("return-data", true);//是否將數(shù)據(jù)保留在Bitmap中返回dataParcelable相應的Bitmap數(shù)據(jù)    startActivityForResult(intent, UPLOAD_PIC_REQUEST);  }}

布局文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical">  <Button    android:id="@+id/take_photo"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_margin="10dp"    android:text="拍照上傳" />  <Button    android:id="@+id/local_pics"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_margin="10dp"    android:text="本地圖庫上傳" />  <TextView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="圖片信息展示"    android:layout_marginLeft="10dp"    android:textSize="16sp"/>  <ImageView    android:id="@+id/upload_image"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_gravity="center_vertical"/></LinearLayout>

圖片操作工具類

import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.text.format.DateFormat;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.util.Calendar;import java.util.Locale;/** * description:從圖片中獲取到的Uri是以content://開頭的,從U中找到對應圖片 * 作者:ldm * 間:20162016/7/11 09:47 */public class ImageUtils {  public static Bitmap uri2Bitmap(Context mContext, Uri uri) {    InputStream in = null;    try {      in = mContext.getContentResolver().openInputStream(uri);      //從輸入流中獲取到圖片      Bitmap bm = BitmapFactory.decodeStream(in);      in.close();      return bm;    } catch (Exception e) {      e.printStackTrace();    }    return null;  }  /**   * @param   * @description 保存圖片到手機SD卡, 并返回圖片對應的文件i   * @author ldm   * @time 2016/7/11 9:55   */  public static Uri saveBitmapToSdCard(Bitmap bm) {    //自定義圖片名稱    String name = DateFormat.format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".png";    //定義圖片存放的位置    File tempFile = new File("/sdcard/Image/");    if (!tempFile.exists()) {      tempFile.mkdir();    }    String fileName = "/sdcard/Image/" + name;    File pic = new File(fileName);    try {      FileOutputStream os = new FileOutputStream(pic);      //對圖片進行壓縮      bm.compress(Bitmap.CompressFormat.PNG, 100, os);      os.flush();      os.close();      return Uri.fromFile(pic);    } catch (Exception e) {      e.printStackTrace();    }    return null;  }}

最后不要忘記在AndroidManifest.xml中添加 相應權限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

希望本文所述對大家Android程序設計有所幫助。


注:相關教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 襄汾县| 广河县| 海盐县| 龙海市| 尼勒克县| 宁远县| 宣武区| 莱西市| 江孜县| 永修县| 光山县| 汉源县| 阿巴嘎旗| 衡山县| 浙江省| 峨眉山市| 中牟县| 城步| 临清市| 昔阳县| 东安县| 元谋县| 武安市| 通海县| 黑山县| 灵丘县| 法库县| 瑞安市| 库伦旗| 商都县| 宁蒗| 河津市| 贡山| 裕民县| 思南县| 东阳市| 报价| 鸡泽县| 常州市| 昌平区| 鞍山市|