/**
* =====================================================================
*
* @file JImage.java
* @Module Name com.joysee.common.utils
* @author xubin
* @OS version 1.0
* @Product type: JoySee
* @date 2013-12-17
* @brief This file is the http **** implementation.
* @This file is responsible by ANDROID TEAM.
* @Comments: ===================================================================== Revision
* History:
*
* Modification Tracking
*
* Author Date OS version Reason ---------- ------------ ------------- ----------- xubin
* 2013-12-17 1.0 Check for NULL, 0 h/w
* =====================================================================
**/
package com.letv.commonjar.utils;
import android.graphics.Bitmap;
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.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Bitmap.Config;
import android.graphics.PorterDuff.Mode;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;
public class JImage {
/**
* @param originalImage 原图
* @param invertedImageH 倒影高度
* @return 倒影图片,消耗较大
*/
public static Bitmap getReflect(Bitmap originalImage, int invertedImageH, boolean isMerge) {
final int reflectionGap = 0;
int width = originalImage.getWidth();
int height = originalImage.getHeight();
Matrix matrix = new Matrix();
matrix.preScale(1, -1);
Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, (height - invertedImageH), width, invertedImageH, matrix, false);
if (!isMerge) {
return reflectionImage;
}
Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + invertedImageH), 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;
}
/**
* @param bitmap
* @param roundPx
* @return 圆角图片,消耗较大
*/
public static Bitmap getRound(Bitmap bitmap, float roundPx) {
if (bitmap == null) {
return null;
}
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);
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;
}
/**
* @param originalImage 原图
* @param invertedImageH 倒影高度
* @param roundPx 圆角角度
* @return 倒影加圆角图片,消耗较大
*/
public static Bitmap getRoundReflect(Bitmap originalImage, int invertedImageH, float roundPx) {
return getRound(getReflect(originalImage, invertedImageH, true), roundPx);
}
/**
* @param imageView
* @param saturation 0.0f - 1.0f
*/
public static void setGray(ImageView imageView, int saturation) {
if (imageView != null) {
ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.setSaturation(saturation);
imageView.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
}
}
/**
* @param drawable
* @param saturation 0.0f - 1.0f
*/
public static void setGray(Drawable drawable, int saturation) {
if (drawable != null) {
ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.setSaturation(saturation);
drawable.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
}
}
/**
* @param bitmap
* @return 黑白图片,消耗较大
*/
public static Bitmap getBlack(Bitmap bitmap) {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
int alpha = 0xFF << 24;
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int grey = pixels[width * i + j];
int red = ((grey & 0x00FF0000) >> 16);
int green = ((grey & 0x0000FF00) >> 8);
int blue = (grey & 0x000000FF);
grey = (int) (red * 0.3 + green * 0.59 + blue * 0.11);
grey = alpha | (grey << 16) | (grey << 8) | grey;
pixels[width * i + j] = grey;
}
}
Bitmap newBmp = Bitmap.createBitmap(width, height, Config.ARGB_8888);
newBmp.setPixels(pixels, 0, width, 0, 0, width, height);
return newBmp;
}
}