欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程实现图片拍照剪裁的方法

程序员文章站 2023-12-16 18:39:58
本文实例讲述了android实现图片拍照剪裁的方法。分享给大家供大家参考,具体如下: 调用系统的裁剪工具对相册或者拍照的图片进行裁剪。 startactivityfor...

本文实例讲述了android实现图片拍照剪裁的方法。分享给大家供大家参考,具体如下:

调用系统的裁剪工具对相册或者拍照的图片进行裁剪。

startactivityforresult用的很恰当,一些系统action需要注意。

package com.photosizing;
import java.io.bytearrayoutputstream;
import java.io.file;
import android.app.activity;
import android.content.intent;
import android.graphics.bitmap;
import android.net.uri;
import android.os.bundle;
import android.os.environment;
import android.provider.mediastore;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;
import android.widget.imageview;
public class testactivity extends activity {
 public static final int none = 0;
 public static final int photohraph = 1;// 拍照
 public static final int photozoom = 2; // 缩放
 public static final int photoresoult = 3;// 结果
 public static final string image_unspecified = "image/*";
 imageview imageview = null;
 button button0 = null;
 button button1 = null;
 @override
 public void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.main);
  imageview = (imageview) findviewbyid(r.id.imageid);
  button0 = (button) findviewbyid(r.id.btn_01);
  button1 = (button) findviewbyid(r.id.btn_02);
  button0.setonclicklistener(new onclicklistener() {
   @override
   public void onclick(view v) {
    intent intent = new intent(intent.action_pick, null);
    intent.setdataandtype(
      mediastore.images.media.external_content_uri, 
      image_unspecified);
    startactivityforresult(intent, photozoom);
   }
  });
  button1.setonclicklistener(new onclicklistener() {
   @override
   public void onclick(view v) {
    intent intent = new intent(mediastore.action_image_capture);
    intent.putextra(mediastore.extra_output, uri.fromfile(new file(
      environment.getexternalstoragedirectory(), "temp.jpg")));
    startactivityforresult(intent, photohraph);
   }
  });
 }
 @override
 protected void onactivityresult(int requestcode, int resultcode, intent data) {
  if (resultcode == none)
   return;
  if (data == null)
   return;
  // 拍照
  if (requestcode == photohraph) {
   // 设置文件保存路径这里放在跟目录下
   file picture = new file(environment.getexternalstoragedirectory()
     + "/temp.jpg");
   startphotozoom(uri.fromfile(picture));
  }
  // 读取相册缩放图片
  if (requestcode == photozoom) {
   startphotozoom(data.getdata());
  }
  // 处理结果
  if (requestcode == photoresoult) {
   bundle extras = data.getextras();
   if (extras != null) {
    bitmap photo = extras.getparcelable("data");
    bytearrayoutputstream stream = new bytearrayoutputstream();
    photo.compress(bitmap.compressformat.jpeg, 75, stream);
    // (0 - 100)压缩文件
    imageview.setimagebitmap(photo);
   }
  }
  super.onactivityresult(requestcode, resultcode, data);
 }
 public void startphotozoom(uri uri) {
  intent intent = new intent("com.android.camera.action.crop");
  intent.setdataandtype(uri, image_unspecified);
  intent.putextra("crop", "true");
  // aspectx aspecty 是宽高的比例
  intent.putextra("aspectx", 1);
  intent.putextra("aspecty", 1);
  // outputx outputy 是裁剪图片宽高
  intent.putextra("outputx", 64);
  intent.putextra("outputy", 64);
  intent.putextra("return-data", true);
  startactivityforresult(intent, photoresoult);
 }
}

xml文件:

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <textview android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/hello" />
<imageview android:id="@+id/imageid"
android:adjustviewbounds="true" android:maxwidth="50dip"
android:maxheight="50dip" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<button android:id="@+id/btn_01" android:layout_height="50dip"
android:text="相册" android:layout_width="150dip"/>
<button android:id="@+id/btn_02" android:layout_height="50dip"
 android:text="拍照" android:layout_width="150dip"/>
</linearlayout>

希望本文所述对大家android程序设计有所帮助。

上一篇:

下一篇: