android图片圆角、图片去色处理示例

Android中图片处理

用来对Android中的项目图片进行处理

代码如下:

package com.zhanggeng.contact.tools;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;

/**
 * 处理图片的工具类.
 *
 */
public class ImageTools {

/** */
 /**
  * 图片去色,返回灰度图片
  *
  * @param bmpOriginal
  *            传入的图片
  * @return 去色后的图片
  */
 public static Bitmap toGrayscale(Bitmap bmpOriginal) {
  int width, height;
  height = bmpOriginal.getHeight();
  width = bmpOriginal.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(bmpOriginal, 0, 0, paint);
  return bmpGrayscale;
 }

/** */
 /**
  * 去色同时加圆角
  *
  * @param bmpOriginal
  *            原图
  * @param pixels
  *            圆角弧度
  * @return 修改后的图片
  */
 public static Bitmap toGrayscale(Bitmap bmpOriginal, int pixels) {
  return toRoundCorner(toGrayscale(bmpOriginal), pixels);
 }

/** */
 /**
  * 把图片变成圆角
  *
  * @param bitmap
  *            需要修改的图片
  * @param pixels
  *            圆角的弧度
  * @return 圆角图片
  */
 public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) {

Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
    bitmap.getHeight(), Config.ARGB_8888);
  Canvas canvas = new Canvas(output);

final int color = 0xff424242;
  final Paint paint = new Paint();
  final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
  final RectF rectF = new RectF(rect);
  final float roundPx = pixels;

paint.setAntiAlias(true);
  canvas.drawARGB(0, 0, 0, 0);
  paint.setColor(color);
  canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
  canvas.drawBitmap(bitmap, rect, rect, paint);

return output;
 }

/** */
 /**
  * 使圆角功能支持BitampDrawable
  *
  * @param bitmapDrawable
  * @param pixels
  * @return
  */
 public static BitmapDrawable toRoundCorner(BitmapDrawable bitmapDrawable,
   int pixels) {
  Bitmap bitmap = bitmapDrawable.getBitmap();
  bitmapDrawable = new BitmapDrawable(toRoundCorner(bitmap, pixels));
  return bitmapDrawable;
 }

/**
  * 读取路径中的图片,然后将其转化为缩放后的bitmap
  *
  * @param path
  */
 public static void saveBefore(String path) {
  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inJustDecodeBounds = true;
  // 获取这个图片的宽和高
  Bitmap bitmap = BitmapFactory.decodeFile(path, options); // 此时返回bm为空
  options.inJustDecodeBounds = false;
  // 计算缩放比
  int be = (int) (options.outHeight / (float) 200);
  if (be <= 0)
   be = 1;
  options.inSampleSize = 2; // 图片长宽各缩小二分之一
  // 重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦
  bitmap = BitmapFactory.decodeFile(path, options);
  int w = bitmap.getWidth();
  int h = bitmap.getHeight();
  System.out.println(w + "   " + h);
  // savePNG_After(bitmap,path);
  saveJPGE_After(bitmap, path);
 }

/**
  * 保存图片为PNG
  *
  * @param bitmap
  * @param name
  */
 public static void savePNG_After(Bitmap bitmap, String name) {
  File file = new File(name);
  try {
   FileOutputStream out = new FileOutputStream(file);
   if (bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)) {
    out.flush();
    out.close();
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

/**
  * 保存图片为JPEG
  *
  * @param bitmap
  * @param path
  */
 public static void saveJPGE_After(Bitmap bitmap, String path) {
  File file = new File(path);
  try {
   FileOutputStream out = new FileOutputStream(file);
   if (bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)) {
    out.flush();
    out.close();
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

/**
  * 图片合成
  *
  * @param bitmap
  * @return
  */
 private Bitmap createBitmap(Bitmap src, Bitmap watermark) {
  if (src == null) {
   return null;
  }
  int w = src.getWidth();
  int h = src.getHeight();
  int ww = watermark.getWidth();
  int wh = watermark.getHeight();
  // create the new blank bitmap
  Bitmap newb = Bitmap.createBitmap(w, h, Config.ARGB_8888);// 创建一个新的和SRC长度宽度一样的位图
  Canvas cv = new Canvas(newb);
  // draw src into
  cv.drawBitmap(src, 0, 0, null);// 在 0,0坐标开始画入src
  // draw watermark into
  cv.drawBitmap(watermark, w - ww + 5, h - wh + 5, null);// 在src的右下角画入水印
  // save all clip
  cv.save(Canvas.ALL_SAVE_FLAG);// 保存
  // store
  cv.restore();// 存储
  return newb;
 }

// 将图片转换成byte[]以便能将其存到数据库
 public static byte[] getByteFromBitmap(Bitmap bitmap) {
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
  try {
   out.flush();
   out.close();
  } catch (IOException e) {
   e.printStackTrace();
   // Log.e(TAG, "transform byte exception");
  }
  return out.toByteArray();
 }

// 得到存储在数据库中的图片
 // eg imageView.setImageBitmap(bitmapobj);
 public static Bitmap getBitmapFromByte(byte[] temp) {
  if (temp != null) {
   Bitmap bitmap = BitmapFactory.decodeByteArray(temp, 0, temp.length);
   return bitmap;
  } else {
   // Bitmap bitmap=BitmapFactory.decodeResource(getResources(),
   // R.drawable.contact_add_icon);
   return null;
  }
 }
    //将手机中的文件转换为Bitmap类型
 public static Bitmap getBitemapFromFile(File f) {
  if (!f.exists())
   return null;
  try {
   return BitmapFactory.decodeFile(f.getAbsolutePath());
  } catch (Exception ex) {
   return null;
  }
 }
 //将手机中的文件转换为Bitmap类型(重载+1)
 public static Bitmap getBitemapFromFile(String fileName) {

try {
   return BitmapFactory.decodeFile(fileName);
  } catch (Exception ex) {
   return null;
  }
 }

}

(0)

相关推荐

  • Android开发实现图片圆角的方法

    本文讲述了Android开发实现图片圆角的方法.分享给大家供大家参考,具体如下: Bitmap myCoolBitmap = ... ; // <-- Your bitmap you want rounded int w = myCoolBitmap.getWidth(), h = myCoolBitmap.getHeight(); Bitmap rounder = Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888); Canvas canvas =

  • Android如何设置圆角图片

    在开发过程中有时需要将图片显示成圆角图片,一般我们可以通过在xml中设置drawable shape即可,但今天我给出另一种方法,用java代码动态去设置圆角,顺便做个简单的笔记. 主要原理是使用系统自带api: RoundedBitmapDrawableFactory 先上效果图: 由于比较简单,直接给出实现方式: public class MainActivity extends AppCompatActivity { private ImageView mImgRectRound; pri

  • Android生成带圆角的Bitmap图片

    本文实例讲述了Android生成带圆角的Bitmap图片.分享给大家供大家参考.具体如下: 有时候我们在开发Android应用时,会遇到圆角图片的问题,那么,我们如何在Android中用代码来生成圆角Bitmap图片呢?下面这段代码也许能够帮到你. 该方法主要用到了drawRoundRect来画圆角矩形,然后通过drawBitmap来画图片. //生成圆角图片 public static Bitmap GetRoundedCornerBitmap(Bitmap bitmap) { try { B

  • Android图片特效:黑白特效、圆角效果、高斯模糊

    1.黑白效果 复制代码 代码如下: /**     * 将彩色图转换为黑白图     *      * @param 位图     * @return 返回转换好的位图     */    public static Bitmap convertToBlackWhite(Bitmap bmp) {        int width = bmp.getWidth(); // 获取位图的宽        int height = bmp.getHeight(); // 获取位图的高 int[] pi

  • android 设置圆角图片实现代码

    复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout" android:orientation="vertical" android:layout_wi

  • android 实现圆角图片解决方案

    现在我们就来看看怎么样把图片的四角都变成圆形的,为什么要这样做那,如果要是这样界面就会非常的美观,下面我们就来看看代码吧. java代码: 复制代码 代码如下: public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas canv

  • Android自定义view实现圆形、圆角和椭圆图片(BitmapShader图形渲染)

    一.前言 Android实现圆角矩形,圆形或者椭圆等图形,一般主要是个自定义View加上使用Xfermode实现的.实现圆角图片的方法其实不少,常见的就是利用Xfermode,Shader.本文直接继承ImageView,使用BitmapShader方法来实现圆形.圆角和椭圆的绘制,等大家看我本文的方法后,其他的类似形状也就都能举一反三来来画出来了. 二.效果图: 三.BitmapShader简介 BitmapShader是Shader的子类,可以通过Paint.setShader(Shader

  • Android中使用BitmapShader类来制作各种图片的圆角

    public   BitmapShader(Bitmap bitmap,Shader.TileMode tileX,Shader.TileMode tileY) 调用这个类来产生一个画有一个位图的渲染器(Shader). bitmap:在渲染器内使用的位图 (1)tileX:The tiling mode for x to draw the bitmap in.   在位图上X方向花砖模式 (2)tileY:The tiling mode for y to draw the bitmap in.

  • Android关于Glide的使用(高斯模糊、加载监听、圆角图片)

    高斯模糊.加载监听.圆角图片这些相信大家都很熟悉,那如何实现这些效果,请大家参考本文进行学习. 1.引用 compile 'com.github.bumptech.glide:glide:3.7.0' 2.加载图片 2.1 基本加载 Glide.with(context)     .load(url)     .into(imageView); 2.2 设置加载中和加载失败的情况 Glide.with(context) .load(url) .placeholder(R.drawable.loa

  • Android 实现圆角图片的简单实例

    Android 实现圆角图片的简单实例 实现效果图: 本来想在网上找个圆角的例子看一看,不尽人意啊,基本都是官方的Demo的那张原理图,稍后会贴出.于是自己自定义了个View,实现图片的圆角以及圆形效果.效果图: Android 圆角图片的实现形式,包括用第三方.也有系统的.比如makeramen:roundedimageview,系统的cardview , glide .fresco . compile 'com.android.support:appcompat-v7:24.0.0' com

  • Android实现圆角图片

    本文实例为大家分享了Android实现圆角图片的具体代码,供大家参考,具体内容如下 效果图: 快速开始 activity_main.xml文件: <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"

  • Android实现圆角图片的方法

    本文实例为大家分享了Android实现圆角图片的具体代码,供大家参考,具体内容如下 效果图 创建类CustomRoundAngleImageView public class CustomRoundAngleImageView extends AppCompatImageView { float width, height; public CustomRoundAngleImageView(Context context) { this(context, null); init(context,

  • android屏幕圆角实现方法的示例代码

    现在很多全面屏手机的屏幕四角做成圆的,其圆润的感觉给人带来别样的视觉体验.先来一张我大锤子镇楼(不是广告呀,锤子没给钱),大家来直观感受一下圆角的魅力. 锤子.jpg 当然这种是硬件上实现的,我怀疑也是方的显示屏,然后做了个圆角遮蔽.那对于我们这些脸方的手机,就不能笑嘻嘻的圆一回吗?答案是肯定的,no picture say ... 效果图 (应该能看出来我用的是神马手机吧) 圆角实现: 那我们就应该思考了,软件层面怎样实现这种效果呢.相信很多朋友立马会想到--使用悬浮窗. 实现原理:利用Win

  • android图片圆角、图片去色处理示例

    Android中图片处理 用来对Android中的项目图片进行处理 复制代码 代码如下: package com.zhanggeng.contact.tools; import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException; import android

  • android绘制圆形图片的两种方式示例

    android绘制圆形图片的两种方式 看下效果先 下面有完整的示例代码 使用BitmapShader(着色器) 我们在绘制view 的时候 就是小学上美术课 用水彩笔在本子上画画 使用着色器绘制圆形图片最简单的理解方式 就是把bitmap当做一种颜色 设置给paint ,paint都已经有颜色了 你想让它方了,圆了,扁了 还不是看你心情 canvas调用那个方法咯 实现的大致思路如下: 1. 创建一个类 继承imageView 重写onDraw() 2. 获取到bitmap图片 3. 计算图片的

  • Android中实现圆角图片的几种方法

    Android中实现圆角图片有多种姿势,不知你解锁了几种? 方法一:setXfermode法 此种方式就是再new一个相同尺寸的bitmap,然后使用paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));先画圆角矩形,再画原始bitmap,然后就得到了一个圆角的bitmap了. public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) { Bitmap

  • Android 图片Bitmap的剪切的示例代码

    一.什么是Android中的Bitmap Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件. 二.Bitmap的剪切基本操作 复制代码 代码如下: public static Bitmap createBitmap (Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter) 从原始位图剪切图像,这是一种高

随机推荐