Android编程之图片相关代码集锦

本文实例总结了Android编程之图片相关代码。分享给大家供大家参考,具体如下:

1. Bitmap转化为字符串:

/**
* @param 位图
* @return 转化成的字符串
*/
public static String bitmapToString(Bitmap bitmap) {
 // 将Bitmap转换成字符串
 String string = null;
 ByteArrayOutputStream bStream = new ByteArrayOutputStream();
 bitmap.compress(CompressFormat.PNG, 100, bStream);
 byte[] bytes = bStream.toByteArray();
 string = Base64.encodeToString(bytes, Base64.DEFAULT);
 return string;
}

2.字符串转化为Bitmap:

/**
* @param string 字符串
* @return 转化成的位图
*/
public static Bitmap stringToBitmap(String string) {
  // 将字符串转换成Bitmap类型
  Bitmap bitmap = null;
  try {
   byte[] bitmapArray;
   bitmapArray = Base64.decode(string, Base64.DEFAULT);
   bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.length);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return bitmap;
}

3.Bitmap转化为Drawable:

/**
* @param bitmap Bitmap位图图像
* @return Drawable 转换后的Drawable对象
*/
public static Drawable bitmapToDrawable(Bitmap bitmap) {
 if (bitmap == null)
  return null;
 if (160 != bitmap.getDensity()) {
  bitmap.setDensity(160);
 }
 return new BitmapDrawable(bitmap);
}

根据图片资源ID获取Drawable对象:

/**
 * @param context 上下文
 * @param id  图片的资源ID
 * @return Drawable对象
 */
public static Drawable resourceToDrawable(Context context,int id) {
 return null == context ? null : bitmapToDrawable(BitmapFactory.decodeResource(context.getResources(), id));
}

byte数组转换Drawble对象:

/**
 * @param bytes byte数组
 * @return drawble对象
 */
public static Drawable byteArrayToDrawable(byte[] bytes) {
 return null == bytes ? null : bitmapToDrawable(BitmapFactory.decodeByteArray(bytes, 0, bytes.length));
}

4.Drawable转化为bitmap:

/**
* Drawble对象转Bitmap对象
* @param drawable drawble对象
* @return bitmap对象
*/
public static Bitmap drawableToBitmap(Drawable drawable) {
  return null == drawable ? null : ((BitmapDrawable) drawable).getBitmap();
}

5.byte数组转换Bitmap对象:

/**
* @param bytes byte数组
* @return bitmap对象
*/
public static Bitmap byteArrayToBitmap(byte[] bytes) {
  return null == bytes ? null : BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}

6.图片去色,返回灰度图片(老式图片):

/**
* @param bitmap 传入的bitmap
* @return 去色后的图片Bitmap对象
*/
public static Bitmap toGrayscale(Bitmap bitmap) {
  int width,height;
  height = bitmap.getHeight();
  width = bitmap.getWidth();
  Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
  Canvas c = new Canvas(bmpGrayscale);
  Paint paint = new Paint();
  ColorMatrix cm = new ColorMatrix();
  cm.setSaturation(0);
  ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
  paint.setColorFilter(f);
  c.drawBitmap(bitmap, 0, 0, paint);
  return bmpGrayscale;
}

7.对图片进行缩放:

/**
* @param url   图片的路径
* @param requireSize 缩放的尺寸
* @return 缩放后的图片Bitmap对象
*/
public static Bitmap getScaleImage(String url,int requireSize) {
  BitmapFactory.Options o = new BitmapFactory.Options();
  // 此属性表示图片不加载到内存,只是读取图片的属性,包括图片的高宽
  o.inJustDecodeBounds = true;
  BitmapFactory.decodeFile(url, o);
  int width_tmp = o.outWidth,height_tmp = o.outHeight;
  int scale = 1;
  while (true) {
   if (width_tmp / 2 < requireSize || height_tmp / 2 < requireSize)
    break;
   width_tmp /= 2;
   height_tmp /= 2;
   scale *= 2;
  }
  BitmapFactory.Options o2 = new BitmapFactory.Options();
  o2.inSampleSize = scale;
  Bitmap bmp = BitmapFactory.decodeFile(url, o2);
  return bmp;
}

8.获得图片的倒影,同时倒影渐变效果:

/**
* @param bitmap 图片源
* @return 处理后的图片Bitmap对象
*/
public static Bitmap createMirro(Bitmap bitmap) {
  int width = bitmap.getWidth();
  int height = bitmap.getHeight();
  int shadow_height = 15;
  int[] pixels = new int[width * height];
  bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
  // shadow effect
  int alpha = 0x00000000;
  for (int y = 0; y < height; y++) {
   for (int x = 0; x < width; x++) {
    int index = y * width + x;
    int r = (pixels[index] >> 16) & 0xff;
    int g = (pixels[index] >> 8) & 0xff;
    int b = pixels[index] & 0xff;
    pixels[index] = alpha | (r << 16) | (g << 8) | b;
   }
   if (y >= (height - shadow_height)) {
    alpha = alpha + 0x1F000000;
   }
  }
  // invert effect
  Bitmap bm = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
  for (int y = 0; y < height; y++) {
   bm.setPixels(pixels, y * width, width, 0, height - y - 1, width, 1);
  }
  return Bitmap.createBitmap(bm, 0, 0, width, shadow_height);
}

9.保存图片到SDCard:

/**
* @param imagePath 图片保存路径
* @param bm 被保存的bitmap对象
*/
public static void saveImgToLocal(String imagePath, Bitmap bm) {
  if (bm == null || imagePath == null || "".equals(imagePath)) {
   return;
  }
  File f = new File(imagePath);
  if (f.exists()) {
   return;
  } else {
   try {
    File parentFile = f.getParentFile();
    if (!parentFile.exists()) {
     parentFile.mkdirs();
    }
    f.createNewFile();
    FileOutputStream fos;
    fos = new FileOutputStream(f);
    bm.compress(Bitmap.CompressFormat.PNG, 100, fos);
    fos.close();
   } catch (FileNotFoundException e) {
    f.delete();
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
    f.delete();
   }
  }
}

10.从SDCard中获取图片:

/**
* @param imagePath 图片在SDCard中保存的路径
* @return 返回保存的bitmap对象
*/
public static Bitmap getImageFromLocal(String imagePath) {
  File file = new File(imagePath);
  if (file.exists()) {
   Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
   file.setLastModified(System.currentTimeMillis());
   return bitmap;
  }
  return null;
}

11.图片压缩处理:

/**
* 对图片进行压缩,主要是为了解决控件显示过大图片占用内存造成OOM问题。
* 一般压缩后的图片大小应该和用来展示它的控件大小相近。
* @param context 上下文
* @param resId 图片资源Id
* @param reqWidth 期望压缩的宽度
* @param reqHeight 期望压缩的高度
* @return 压缩后的图片
*/
public static Bitmap compressBitmapFromResourse(Context context, int resId, int reqWidth, int reqHeight) {
  final BitmapFactory.Options options = new BitmapFactory.Options();
  /*
   * 第一次解析时,inJustDecodeBounds设置为true,
   * 禁止为bitmap分配内存,虽然bitmap返回值为空,但可以获取图片大小
   */
  options.inJustDecodeBounds = true;
  BitmapFactory.decodeResource(context.getResources(), resId, options);
  final int height = options.outHeight;
  final int width = options.outWidth;
  int inSampleSize = 1;
  if (height > reqHeight || width > reqWidth) {
   final int heightRatio = Math.round((float) height / (float) reqHeight);
   final int widthRatio = Math.round((float) width / (float) reqWidth);
   inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
  }
  options.inSampleSize = inSampleSize;
  //使用计算得到的inSampleSize值再次解析图片
  options.inJustDecodeBounds = false;
  return BitmapFactory.decodeResource(context.getResources(), resId, options);
}

12. 获取可用内存的最大值(App使用内存超出这个值会引起OutOfMemory异常):

private int getMaxMemoryForApp() {
  int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
  return maxMemory;
}

13.将图片裁剪成圆圈:

/**
* 将Bitmap处理为圆形的图片
* @param bitmap 处理之前的位图
* @return 处理之后的位图
*/
public static Bitmap circlePic(Bitmap bitmap){
  int width = bitmap.getWidth();
  int height = bitmap.getHeight();
  int r = width < height ? width/2:height/2;//圆的半径,取宽和高中较小的,以便于显示没有空白
  Bitmap outBitmap = Bitmap.createBitmap(r*2, r*2, Bitmap.Config.ARGB_8888);//创建一个刚好2r大小的Bitmap
  Canvas canvas = new Canvas(outBitmap);
  final int color =0xff424242;
  final Paint paint = new Paint();
  /**
   * 截取图像的中心的一个正方形,用于在原图中截取
   * 坐标如下:
   * 1.如果 w < h , 左上坐标(0, (h-w)/2) , 右上坐标(w, (h+w)/2) 偏移10
   * 2.如果 w > h , 左上坐标((w-h)/2, 0) , 右上坐标((w+h)/2, h) 偏移10
   */
  final Rect rect = new Rect( width < height ? 0 : (width-height)/2, width < height ? (height-width)/2 - 10 : -10,
    width < height ? width : (width+height)/2, (width < height ? (height+width)/2 - 10: height - 10));
  //创建一个直径大小的正方形,用于设置canvas的显示与设置画布截取
  final Rect rect2 = new Rect( 0, 0, r*2, r*2);
  //提高精度,用于消除锯齿
  final RectF rectF = new RectF(rect2);
  //下面是设置画笔和canvas
  paint.setAntiAlias(true);
  canvas.drawARGB(0,0,0,0);
  paint.setColor(color);
  //设置圆角,半径都为r,大小为rect2
  canvas.drawRoundRect(rectF, r, r, paint);
  //设置图像重叠时的显示方式
  paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
  //绘制图像到canvas
  canvas.drawBitmap(bitmap, rect, rect2, paint);
  return outBitmap;
 }
}

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

(0)

相关推荐

  • Android编程中图片特效处理方法小结

    本文实例总结了Android编程中图片特效处理方法.分享给大家供大家参考,具体如下: 这里介绍的Android图片处理方法包括: 转换 -  drawable To  bitmap 缩放 -  Zoom 圆角 -  Round Corner 倒影 -  Reflected bitmapPrcess  code: package com.learn.games; import android.graphics.Bitmap; import android.graphics.Canvas; impo

  • Android开发从相机或相册获取图片裁剪

    废话不多说了,直接给大家贴代码了. package com.only.android.app; 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.gr

  • android图片类型之间相互转换实现代码

    本文实例讲述了android图片类型之间相互转换实现代码.分享给大家供大家参考.具体如下: android在处理一写图片资源的时候,会进行一些类型的转换,现在有空整理一下: 1.Drawable → Bitmap Java代码如下: public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap .createBitmap( drawable.getIntrinsicWidth(), drawab

  • android编程实现图片库的封装方法

    本文实例讲述了android编程实现图片库的封装方法.分享给大家供大家参考,具体如下: 大家在做安卓应用的时候 经常要从网络中获取图片 都是通过URL去获取 可是如果本地有图片数据 从本地获取数据不更加快一些 自己在工作中遇到这个问题 所以采用了一个URL和本地图片的一个映射关系 先从本地区获取 假如本地没有再从网络中获取 本方法考虑到多线程问题 欢迎大家一起共同探讨! public class PictureLibrary { /* * 图片库的操作 */ File file; URL url

  • Android编程之图片颜色处理方法

    本文实例讲述了Android编程之图片颜色处理方法.分享给大家供大家参考,具体如下: 你想做到跟美图秀秀一样可以处理自己的照片,美化自己的照片吗?其实你也可以自己做一个这样的软件,废话不多说了,直接上图,上代码了! 效果图如下: 没处理前: 处理之后: MainActivity.java的代码如下: package net.loonggg.test; import android.app.Activity; import android.graphics.Bitmap; import andro

  • Android图片转换器代码分享

    MainActivity.java package com.zhang.showPhoto; import android.app.ActionBar.LayoutParams; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animati

  • android编程实现系统图片剪裁的方法

    本文实例讲述了android编程实现系统图片剪裁的方法.分享给大家供大家参考,具体如下: package cn.test; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentUris; impo

  • Android启动相机拍照并返回图片

    具体实现过程请看下面代码: 简单的调用了一下系统的拍照功能 代码如下所示: //拍照的方法 private void openTakePhoto(){ /** * 在启动拍照之前最好先判断一下sdcard是否可用 */ String state = Environment.getExternalStorageState(); //拿到sdcard是否可用的状态码 if (state.equals(Environment.MEDIA_MOUNTED)){ //如果可用 Intent intent

  • Android编程学习之异步加载图片的方法

    本文实例讲述了Android编程学习之异步加载图片的方法.分享给大家供大家参考,具体如下: 最近在android开发中碰到比较棘手的问题,就是加载图片内存溢出.我开发的是一个新闻应用,应用中用到大量的图片,一个界面中可能会有上百张图片.开发android应用的朋友可能或多或少碰到加载图片内存溢出问题,一般情况下,加载一张大图就会导致内存溢出,同样,加载多张图片内存溢出的概率也很高. 列一下网络上查到的一般做法: 1.使用BitmapFactory.Options对图片进行压缩 2.优化加载图片的

  • Android代码实现图片和文字上下布局

    在Android开发中经常会需要用到带文字和图片的button,下面来给大家介绍使用radiobutton实现图片和文字上下布局或左右布局.代码很简单就不给大家多解释了. 布局文件很简单,用来展示RadioBUtton的使用方法. <?xml version="." encoding="utf-"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and

  • Android实现ListView异步加载图片的方法

    本文实例讲述了Android实现ListView异步加载图片的方法.分享给大家供大家参考.具体如下: ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源一般使用这种方法比较好,用户体验好,不用让用户等待下去,下面就说实现方法,先贴上主方法的代码: package cn.wangmeng.test; import java.io.IOException; import java.io.InputStream; import java.lang.ref.SoftReferen

  • Android编程实现给Button添加图片和文字的方法

    本文实例讲述了Android编程实现给Button添加图片和文字的方法.分享给大家供大家参考,具体如下: //为按钮添加图片和文字的方法 public Spanned getSpan(int id, String s) { ImageGetter imgGetter = new Html.ImageGetter() { @Override public Drawable getDrawable(String source) { // TODO Auto-generated method stub

随机推荐