/*
* Copyright (C) 2013 WhiteCat 白猫 (www.thinkandroid.cn)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.ta.util.extend.draw;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.BitmapDrawable;
/**
* @Title ImageUtils
* @Package com.ta.util.extend.draw
* @Description 处理图片的工具类.
* @author 白猫
* @date 2013-1-22 下午 9:35
* @version V1.0
*/
public class ImageUtils
{
private static float[] carray = new float[20];
/**
* 图片去色,返回灰度图片
*
* @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();
paint.setColorFilter(null);
c.drawBitmap(bmpGrayscale, 0, 0, paint);
ColorMatrix cm = new ColorMatrix();
getValueBlackAndWhite();
cm.set(carray);
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(bmpOriginal, 0, 0, paint);
return bmpGrayscale;
}
public static void getValueSaturation()
{
// 高饱和度
carray[0] = 5;
carray[1] = 0;
carray[2] = 0;
carray[3] = 0;
carray[4] = -254;
carray[5] = 0;
carray[6] = 5;
carray[7] = 0;
carray[8] = 0;
carray[9] = -254;
carray[10] = 0;
carray[11] = 0;
carray[12] = 5;
carray[13] = 0;
carray[14] = -254;
carray[15] = 0;
carray[16] = 0;
carray[17] = 0;
carray[18] = 5;
carray[19] = -254;
}
private static void getValueBlackAndWhite()
{
// 黑白
carray[0] = (float) 0.308;
carray[1] = (float) 0.609;
carray[2] = (float) 0.082;
carray[3] = 0;
carray[4] = 0;
carray[5] = (float) 0.308;
carray[6] = (float) 0.609;
carray[7] = (float) 0.082;
carray[8] = 0;
carray[9] = 0;
carray[10] = (float) 0.308;
carray[11] = (float) 0.609;
carray[12] = (float) 0.082;
carray[13] = 0;
carray[14] = 0;
carray[15] = 0;
carray[16] = 0;
carray[17] = 0;
carray[18] = 1;
carray[19] = 0;
}
/***/
/**
* 去色同时加圆角
*
* @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;
}
/**
* 生成图片倒影
*
* @param originalImage
* @return
*/
public static Bitmap createReflectedImage(Bitmap originalImage)
{
final int reflectionGap = 4;
int width = originalImage.getWidth();
int height = originalImage.getHeight();
Matrix matrix = new Matrix();
matrix.preScale(1, -1);
Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0,
height / 2, width, height / 2, matrix, false);
Bitmap bitmapWithReflection = Bitmap.createBitmap(width,
(height + height / 2), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmapWithReflection);
canvas.drawBitmap(originalImage, 0, 0, null);
Paint defaultPaint = new Paint();
canvas.drawRect(0, height, width, height + reflectionGap, defaultPaint);
canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
Paint paint = new Paint();
LinearGradient shader = new LinearGradient(0,
originalImage.getHeight(), 0, bitmapWithReflection.getHeight()
+ reflectionGap, 0x70ffffff, 0x00ffffff,
TileMode.MIRROR);
paint.setShader(shader);
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
+ reflectionGap, paint);
return bitmapWithReflection;
}
}