iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android裁剪图像实现方法示例
  • 464
分享到

Android裁剪图像实现方法示例

示例方法Android 2022-06-06 07:06:47 464人浏览 独家记忆
摘要

本文实例讲述了Android裁剪图像实现方法。分享给大家供大家参考,具体如下: package com.xiaoma.piccut.demo; import java.io.

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


package com.xiaoma.piccut.demo;
import java.io.File;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
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.ImageButton;
import android.widget.ImageView;

public class PicCutDemoActivity extends Activity implements OnClickListener {
  private ImageButton ib = null;
  private ImageView iv = null;
  private Button btn = null;
  private String tp = null;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //初始化
    init();
  }
  
  private void init() {
    ib = (ImageButton) findViewById(R.id.imageButton1);
    iv = (ImageView) findViewById(R.id.imageView1);
    btn = (Button) findViewById(R.id.button1);
    ib.setOnClickListener(this);
    iv.setOnClickListener(this);
    btn.setOnClickListener(this);
  }
  
  @Override
  public void onClick(View v) {
    switch (v.getId()) {
    case R.id.imageButton1:
      ShowPickDialog();
      break;
    case R.id.imageView1:
      ShowPickDialog();
      break;
    case R.id.button1:
      ShowPickDialog();
      break;
    default:
      break;
    }
  }
  
  private void ShowPickDialog() {
    new AlertDialog.Builder(this)
    .setTitle("设置头像...")
    .setNegativeButton("相册", new DialogInterface.OnClickListener() {
     public void onClick(DialogInterface dialog, int which) {
      dialog.dismiss();
      
      Intent intent = new Intent(Intent.ACTION_PICK, null);
      
      intent.setDataAndType(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
        "image
      Intent intent = new Intent(
        MediaStore.ACTION_IMAGE_CAPTURE);
      //下面这句指定调用相机拍照后的照片存储的路径
      intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
        .fromFile(new File(Environment
          .getExternalStorageDirectory(),
          "xiaoma.jpg")));
      startActivityForResult(intent, 2);
     }
    }).show();
  }
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    // 如果是直接从相册获取
    case 1:
      startPhotoZoom(data.getData());
      break;
    // 如果是调用相机拍照时
    case 2:
      File temp = new File(Environment.getExternalStorageDirectory()
          + "/xiaoma.jpg");
      startPhotoZoom(Uri.fromFile(temp));
      break;
    // 取得裁剪后的图片
    case 3:
      
      if(data != null){
        setPicToView(data);
      }
      break;
    default:
      break;
    }
    super.onActivityResult(requestCode, resultCode, data);
  }
  
  public void startPhotoZoom(Uri uri) {
    
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(uri, "image
  private void setPicToView(Intent picdata) {
    Bundle extras = picdata.getExtras();
    if (extras != null) {
      Bitmap photo = extras.getParcelable("data");
      Drawable drawable = new BitmapDrawable(photo);
      
      
      ib.setBackgroundDrawable(drawable);
      iv.setBackgroundDrawable(drawable);
    }
  }
}

下裁剪中用到的类,大家详细看下头注释:


package com.xiaoma.piccut.demo;

//EPL, Eclipse Public License, V1.0 or later, Http://www.eclipse.org/legal
//LGPL, GNU Lesser General Public License, V2.1 or later, http://www.gnu.org/licenses/lgpl.html
//GPL, GNU General Public License, V2 or later, http://www.gnu.org/licenses/gpl.html
//AL, Apache License, V2.0 or later, http://www.apache.org/licenses
//BSD, BSD License, http://www.opensource.org/licenses/bsd-license.PHP


public class Base64Coder {
//The line separator string of the operating system.
private static final String systemLineSeparator = System.getProperty("line.separator");
//Mapping table from 6-bit nibbles to Base64 characters.
private static char[]  map1 = new char[64];
static {
  int i=0;
  for (char c='A'; c<='Z'; c++) map1[i++] = c;
  for (char c='a'; c<='z'; c++) map1[i++] = c;
  for (char c='0'; c<='9'; c++) map1[i++] = c;
  map1[i++] = '+'; map1[i++] = '/'; }
//Mapping table from Base64 characters to 6-bit nibbles.
private static byte[]  map2 = new byte[128];
static {
  for (int i=0; i<map2.length; i++) map2[i] = -1;
  for (int i=0; i<64; i++) map2[map1[i]] = (byte)i; }

public static String encodeString (String s) {
return new String(encode(s.getBytes())); }

public static String encodeLines (byte[] in) {
return encodeLines(in, 0, in.length, 76, systemLineSeparator); }

public static String encodeLines (byte[] in, int iOff, int iLen, int lineLen, String lineSeparator) {
int blockLen = (lineLen*3) / 4;
if (blockLen <= 0) throw new IllegalArgumentException();
int lines = (iLen+blockLen-1) / blockLen;
int bufLen = ((iLen+2)/3)*4 + lines*lineSeparator.length();
StringBuilder buf = new StringBuilder(bufLen);
int ip = 0;
while (ip < iLen) {
  int l = Math.min(iLen-ip, blockLen);
  buf.append (encode(in, iOff+ip, l));
  buf.append (lineSeparator);
  ip += l; }
return buf.toString(); }

public static char[] encode (byte[] in) {
return encode(in, 0, in.length); }

public static char[] encode (byte[] in, int iLen) {
return encode(in, 0, iLen); }

public static char[] encode (byte[] in, int iOff, int iLen) {
int oDataLen = (iLen*4+2)/3;    // output length without padding
int oLen = ((iLen+2)/3)*4;     // output length including padding
char[] out = new char[oLen];
int ip = iOff;
int iEnd = iOff + iLen;
int op = 0;
while (ip < iEnd) {
  int i0 = in[ip++] & 0xff;
  int i1 = ip < iEnd ? in[ip++] & 0xff : 0;
  int i2 = ip < iEnd ? in[ip++] & 0xff : 0;
  int o0 = i0 >>> 2;
  int o1 = ((i0 &  3) << 4) | (i1 >>> 4);
  int o2 = ((i1 & 0xf) << 2) | (i2 >>> 6);
  int o3 = i2 & 0x3F;
  out[op++] = map1[o0];
  out[op++] = map1[o1];
  out[op] = op < oDataLen ? map1[o2] : '='; op++;
  out[op] = op < oDataLen ? map1[o3] : '='; op++; }
return out; }

public static String decodeString (String s) {
return new String(decode(s)); }

public static byte[] decodeLines (String s) {
char[] buf = new char[s.length()+3];
int p = 0;
for (int ip = 0; ip < s.length(); ip++) {
  char c = s.charAt(ip);
  if (c != ' ' && c != '\r' && c != '\n' && c != '\t')
   buf[p++] = c; }
  while ((p % 4) != 0)
    buf[p++] = '0';
return decode(buf, 0, p); }

public static byte[] decode (String s) {
return decode(s.toCharArray()); }

public static byte[] decode (char[] in) {
return decode(in, 0, in.length); }

public static byte[] decode (char[] in, int iOff, int iLen) {
if (iLen%4 != 0) throw new IllegalArgumentException ("Length of Base64 encoded input string is not a multiple of 4.");
while (iLen > 0 && in[iOff+iLen-1] == '=') iLen--;
int oLen = (iLen*3) / 4;
byte[] out = new byte[oLen];
int ip = iOff;
int iEnd = iOff + iLen;
int op = 0;
while (ip < iEnd) {
  int i0 = in[ip++];
  int i1 = in[ip++];
  int i2 = ip < iEnd ? in[ip++] : 'A';
  int i3 = ip < iEnd ? in[ip++] : 'A';
  if (i0 > 127 || i1 > 127 || i2 > 127 || i3 > 127)
   throw new IllegalArgumentException ("Illegal character in Base64 encoded data.");
  int b0 = map2[i0];
  int b1 = map2[i1];
  int b2 = map2[i2];
  int b3 = map2[i3];
  if (b0 < 0 || b1 < 0 || b2 < 0 || b3 < 0)
   throw new IllegalArgumentException ("Illegal character in Base64 encoded data.");
  int o0 = ( b0    <<2) | (b1>>>4);
  int o1 = ((b1 & 0xf)<<4) | (b2>>>2);
  int o2 = ((b2 &  3)<<6) | b3;
  out[op++] = (byte)o0;
  if (op<oLen) out[op++] = (byte)o1;
  if (op<oLen) out[op++] = (byte)o2; }
return out; }
//Dummy constructor.
private Base64Coder() {}
} // end class Base64Coder

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

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

您可能感兴趣的文章:Android编程实现调用系统图库与裁剪图片功能Android图片裁剪功能实现代码Android实现图片的裁剪(不调用系统功能)Android调用系统裁剪的实现方法


--结束END--

本文标题: Android裁剪图像实现方法示例

本文链接: https://www.lsjlt.com/news/24242.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • android实现图片裁剪的两种方法
    两种android图片裁剪方式,供大家参考,具体内容如下 一、相机拍完照之后利用系统自带裁剪工具进行截取 public static void cropImage(Activit...
    99+
    2024-04-02
  • java实现的图片裁剪功能示例
    本文实例讲述了java实现的图片裁剪功能。分享给大家供大家参考,具体如下:PicCut.java:package Tsets;import java.awt.Rectangle;import java.awt.image.BufferedI...
    99+
    2023-05-31
    java 图片 裁剪
  • C++实现图像目标区裁剪ImageCropping
    目录场景需求功能函数代码C++测试代码测试效果     场景需求 在做图像处理时,有时候会需要适当地进行一些裁剪工作,比如我做干涉测量领域,我们所要处理...
    99+
    2024-04-02
  • Java实现图片裁剪功能的示例详解
    目录前言Maven依赖代码验证一下前言 本文提供将图片按照自定义尺寸进行裁剪的Java工具类,一如既往的实用主义。 Maven依赖 <dependency>...
    99+
    2024-04-02
  • Cropper.js进阶之实现圆形头像裁剪功能示例
    目录引言准备工作页面结构添加样式编写JavaScript总结全部代码如下引言 在Web应用中,让用户上传并裁剪图片以创建个人头像是一项非常常见的需求。本文将介绍如何使用著名的图片裁剪...
    99+
    2023-05-19
    Cropper.js圆形头像裁剪 Cropper.js头像裁剪
  • python数字图像处理像素的访问与裁剪示例
    目录引言彩色图片访问方式为:灰度图片访问方式为:例1:输出小猫图片的G通道中的第20行30列的像素值例2:显示红色单通道图片例3:对小猫图片随机添加椒盐噪声例4:对小猫图片进行裁剪例...
    99+
    2024-04-02
  • C++如何实现图像目标区裁剪ImageCropping
    这篇“C++如何实现图像目标区裁剪ImageCropping”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++如何实现图像...
    99+
    2023-07-02
  • Android如何实现拍照及图片裁剪
    这篇文章主要介绍Android如何实现拍照及图片裁剪,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最近做项目中涉及到了图片相关功能 ,在使用安卓6.0手机及7.1手机拍照时,遇到了因权限及文件管理导致程序崩溃等问题。...
    99+
    2023-05-30
    android6.0
  • Node+UDP实现图片裁剪功能的方法
    这篇文章将为大家详细讲解有关Node+UDP实现图片裁剪功能的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。UDP服务器可以用于一些特殊数据的(高效)传输,例如图片、视频和音频信息等我见过一些大佬用U...
    99+
    2023-06-08
  • Android实现手势划定区域裁剪图片
    本文实例为大家分享了Android实现手势划定区域裁剪图片的具体代码,供大家参考,具体内容如下 需求: 拍照,然后对图片进行处理,划定矩形区域,将矩形区域裁剪下来 思路: 1、使用系...
    99+
    2024-04-02
  • Python实现视频裁剪的示例代码
    目录前言环境依赖代码验证一下前言 本文提供将视频按照自定义尺寸进行裁剪的工具方法,一如既往的实用主义。 环境依赖 ffmpeg环境安装,可以参考文章:windows ffmpeg安装...
    99+
    2024-04-02
  • vue-cropper实现裁剪图片
    本文实例为大家分享了vue-cropper实现裁剪图片的具体代码,供大家参考,具体内容如下 先展示一下效果 如何使用: 1、安装  npm install vue-cro...
    99+
    2024-04-02
  • Android实现裁剪照片功能
    本文实例为大家分享了Android实现裁剪照片功能的具体代码,供大家参考,具体内容如下 1.   从相册选择照片进行裁剪 从相册选择照片并裁剪: private void...
    99+
    2024-04-02
  • python图像填充与裁剪/resize的实现代码
    目录前言代码resize前言 有时候我们需要把图片填充成某个数字的整数倍才能送进模型。例如,有些模型下采样倍率是8倍,或者16倍,那么输入的长和高就分别应该是8或16的整数倍。如果图...
    99+
    2024-04-02
  • android实现拖拽裁剪功能
    本文实例为大家分享了android拖拽框,裁剪出图片的具体代码,供大家参考,具体内容如下 import android.graphics.Bitmap; import androi...
    99+
    2024-04-02
  • cropperjs实现裁剪图片功能
    本文实例为大家分享了cropperjs实现裁剪图片功能的具体代码,供大家参考,具体内容如下 cropperjs (裁剪图片) vue版本 // 下载 // npm install c...
    99+
    2024-04-02
  • 前端vue-cropperjs实现图片裁剪方案
    目录引言图片裁剪图片裁剪的流程vue-cropperjs的使用代码实现实现效果v-viewer的使用代码实现实现效果最后引言 做了个图片的裁剪的功能和预览的功能,前端图片的裁剪方案,...
    99+
    2024-04-02
  • Cropper.js进阶实现图片旋转裁剪处理功能示例
    目录引言准备工作页面结构编写JavaScript总结全部代码如下引言 在Web应用中,处理用户上传的图片是一项非常常见的需求。有时,用户可能需要旋转图片以获得更好的视觉效果。本文将介...
    99+
    2023-05-19
    Cropper.js图片旋转裁剪 Cropper.js图片处理
  • Vue3中实现选取头像并裁剪
    目录最终效果安装VueCropper组件在组件中引用获取图片内容自定义上传图片完整的代码实现在一个项目中,尤其是个人中心功能中,免不了要有设置头像的功能,设置时为了最后展示的时候美观...
    99+
    2023-05-15
    Vue3中实现选取头像并裁剪 Vue3选取头像并裁剪
  • Cropper.js入门之在HTML中实现交互式图像裁剪
    目录简单介绍:安装方法:npm引入:cdn引入:简单入门简单介绍: Cropper.js是一个基于JavaScript的图像裁剪库,用于在网页或应用程序中实现灵活和交互式的图像裁剪功...
    99+
    2023-05-19
    Cropper.js HTML交互式图像裁剪 Cropper.js HTML交互
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作