-
int height = bitmap.getHeight();
-
int pieceWidth = width / 3;
-
int pieceHeight = height / 3;
-
for (int i = 0; i < yPiece; i++) {
-
for (int j = 0; j < xPiece; j++) {
-
ImagePiece piece = new ImagePiece();
-
piece.index = j + i * xPiece;
-
int xValue = j * pieceWidth;
-
int yValue = i * pieceHeight;
-
piece.bitmap = Bitmap.createBitmap(bitmap, xValue, yValue,
-
pieceWidth, pieceHeight);
-
pieces.add(piece);
-
}
-
}
-
return pieces;
-
}
-
}
1、图标加灰色过滤;
2、android的图片资源默认是静态的,单实例;如果两个IM好友的头像一样,最简单的都是用的软件自带头像,有一个在线,一个离线,直接改变头像的灰度,则两个用户的头像都会变灰或者在线,答案是:Drawable.mutate()。
-
Drawable mDrawable = context.getResources().getDrawable(R.drawable.face_icon);
-
//Make this drawable mutable.
-
//A mutable drawable is guaranteed to not share its state with any other drawable.
-
mDrawable.mutate();
-
ColorMatrix cm = new ColorMatrix();
-
cm.setSaturation(0);
-
ColorMatrixColorFilter cf = new ColorMatrixColorFilter(cm);
-
mDrawable.setColorFilter(cf);
生成缩略图,抠自android launcher源码:
-
/*
-
* Copyright © 2008 The Android Open Source Project
-
*
-
* 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.android.launcher;
-
import android.graphics.drawable.BitmapDrawable;
-
import android.graphics.drawable.Drawable;
-
import android.graphics.drawable.PaintDrawable;
-
import android.graphics.Bitmap;
-
import android.graphics.PixelFormat;
-
import android.graphics.Canvas;
-
import android.graphics.PaintFlagsDrawFilter;
-
import android.graphics.Paint;
-
import android.graphics.Rect;
-
import android.content.res.Resources;
-
import android.content.Context;
-
/**
-
* Various utilities shared amongst the Launcher’s classes.
-
*/
-
final class Utilities {
-
private static int sIconWidth = -1;
-
private static int sIconHeight = -1;
-
private static final Paint sPaint = new Paint();
-
private static final Rect sBounds = new Rect();
-
private static final Rect sOldBounds = new Rect();
-
private static Canvas sCanvas = new Canvas();
-
static {
-
sCanvas.setDrawFilter(new PaintFlagsDrawFilter(Paint.DITHER_FLAG,
-
Paint.FILTER_BITMAP_FLAG));
-
}
-
/**
-
* Returns a Drawable representing the thumbnail of the specified Drawable.
-
* The size of the thumbnail is defined by the dimension
-
* android.R.dimen.launcher_application_icon_size.
-
*
-
* This method is not thread-safe and should be invoked on the UI thread only.
-
*
-
* @param icon The icon to get a thumbnail of.
-
* @param context The application’s context.
-
*
-
* @return A thumbnail for the specified icon or the icon itself if the
-
* thumbnail could not be created.
-
*/
-
static Drawable createIconThumbnail(Drawable icon, Context context) {
-
if (sIconWidth == -1) {
-
final Resources resources = context.getResources();
-
sIconWidth = sIconHeight = (int) resources.getDimension(android.R.dimen.app_icon_size);
-
}
-
int width = sIconWidth;
-
int height = sIconHeight;
-
float scale = 1.0f;
-
if (icon instanceof PaintDrawable) {
-
PaintDrawable painter = (PaintDrawable) icon;
-
painter.setIntrinsicWidth(width);
-
painter.setIntrinsicHeight(height);
-
} else if (icon instanceof BitmapDrawable) {
-
// Ensure the bitmap has a density.
-
BitmapDrawable bitmapDrawable = (BitmapDrawable) icon;
-
Bitmap bitmap = bitmapDrawable.getBitmap();
-
if (bitmap.getDensity() == Bitmap.DENSITY_NONE) {
-
bitmapDrawable.setTargetDensity(context.getResources().getDisplayMetrics());
-
}
-
}
-
int iconWidth = icon.getIntrinsicWidth();
-
int iconHeight = icon.getIntrinsicHeight();
-
if (width > 0 && height > 0) {
-
if (width < iconWidth || height < iconHeight || scale != 1.0f) {
-
final float ratio = (float) iconWidth / iconHeight;
-
if (iconWidth > iconHeight) {
-
height = (int) (width / ratio);
-
} else if (iconHeight > iconWidth) {
-
width = (int) (height * ratio);
-
}
-
final Bitmap.Config c = icon.getOpacity() != PixelFormat.OPAQUE ?
-
Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;
-
final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);
-
final Canvas canvas = sCanvas;
-
canvas.setBitmap(thumb);
-
// Copy the old bounds to restore them later
-
// If we were to do oldBounds = icon.getBounds(),
-
// the call to setBounds() that follows would
-
// change the same instance and we would lose the
-
// old bounds
-
sOldBounds.set(icon.getBounds());
-
final int x = (sIconWidth - width) / 2;
-
final int y = (sIconHeight - height) / 2;
-
icon.setBounds(x, y, x + width, y + height);
-
icon.draw(canvas);
-
icon.setBounds(sOldBounds);
-
icon = new FastBitmapDrawable(thumb);
-
} else if (iconWidth < width && iconHeight < height) {
-
final Bitmap.Config c = Bitmap.Config.ARGB_8888;
-
final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);
-
final Canvas canvas = sCanvas;
-
canvas.setBitmap(thumb);
-
sOldBounds.set(icon.getBounds());
-
final int x = (width - iconWidth) / 2;
-
final int y = (height - iconHeight) / 2;
-
icon.setBounds(x, y, x + iconWidth, y + iconHeight);
-
icon.draw(canvas);
-
icon.setBounds(sOldBounds);
-
icon = new FastBitmapDrawable(thumb);
-
}
-
}
-
return icon;
-
}
-
/**
-
* Returns a Bitmap representing the thumbnail of the specified Bitmap.
-
* The size of the thumbnail is defined by the dimension
-
* android.R.dimen.launcher_application_icon_size.
-
*
-
* This method is not thread-safe and should be invoked on the UI thread only.
-
*
-
* @param bitmap The bitmap to get a thumbnail of.
-
* @param context The application’s context.
-
*
-
* @return A thumbnail for the specified bitmap or the bitmap itself if the
-
* thumbnail could not be created.
-
*/
-
static Bitmap createBitmapThumbnail(Bitmap bitmap, Context context) {
-
if (sIconWidth == -1) {
-
final Resources resources = context.getResources();
-
sIconWidth = sIconHeight = (int) resources.getDimension(
-
android.R.dimen.app_icon_size);
-
}
-
int width = sIconWidth;
-
int height = sIconHeight;
-
final int bitmapWidth = bitmap.getWidth();
-
final int bitmapHeight = bitmap.getHeight();
-
if (width > 0 && height > 0) {
-
if (width < bitmapWidth || height < bitmapHeight) {
-
final float ratio = (float) bitmapWidth / bitmapHeight;
-
if (bitmapWidth > bitmapHeight) {
-
height = (int) (width / ratio);
-
} else if (bitmapHeight > bitmapWidth) {
-
width = (int) (height * ratio);
-
}
-
final Bitmap.Config c = (width == sIconWidth && height == sIconHeight) ?
-
bitmap.getConfig() : Bitmap.Config.ARGB_8888;
-
final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);
-
final Canvas canvas = sCanvas;
-
final Paint paint = sPaint;
-
canvas.setBitmap(thumb);
-
paint.setDither(false);
-
paint.setFilterBitmap(true);
-
sBounds.set((sIconWidth - width) / 2, (sIconHeight - height) / 2, width, height);
-
sOldBounds.set(0, 0, bitmapWidth, bitmapHeight);
-
canvas.drawBitmap(bitmap, sOldBounds, sBounds, paint);
-
return thumb;
-
} else if (bitmapWidth < width || bitmapHeight < height) {
-
final Bitmap.Config c = Bitmap.Config.ARGB_8888;
-
final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight, c);
-
final Canvas canvas = sCanvas;
-
final Paint paint = sPaint;
-
canvas.setBitmap(thumb);
-
paint.setDither(false);
-
paint.setFilterBitmap(true);
-
canvas.drawBitmap(bitmap, (sIconWidth - bitmapWidth) / 2,
-
(sIconHeight - bitmapHeight) / 2, paint);
-
return thumb;
-
}
-
}
-
return bitmap;
-
}
-
}
-
//Android Matrix类实现镜像方法
-
public void drawRegion(Image image_src,
-
int x_src, int y_src,
-
int width, int height,
-
int transform,
-
int x_dest, int y_dest,
-
int anchor){
-
if((anchor&VCENTER) != 0){
-
y_dest -= height/2;
-
}else if((anchor&BOTTOM) != 0){
-
y_dest -= height;
-
}
-
if((anchor&RIGHT) != 0){
-
x_dest -= width;
-
}else if((anchor&HCENTER) != 0){
-
x_dest -= width/2;
-
}
-
Bitmap newMap = Bitmap.createBitmap(image_src.getBitmap(), x_src, y_src, width, height);
-
Matrix mMatrix = new Matrix();
-
Matrix temp = new Matrix();
-
Matrix temp2 = new Matrix();
-
float[] mirrorY = {
-
-1, 0, 0,
-
0, 1, 0,
-
0, 0, 1
-
};
-
temp.setValues(mirrorY);
-
switch(transform){
-
case Sprite.TRANS_NONE:
-
break;
-
case Sprite.TRANS_ROT90:
-
mMatrix.setRotate(90,width/2, height/2);
-
break;
-
case Sprite.TRANS_ROT180:
-
mMatrix.setRotate(180,width/2, height/2);
-
break;
-
case Sprite.TRANS_ROT270:
-
mMatrix.setRotate(270,width/2, height/2);
-
break;
-
case Sprite.TRANS_MIRROR:
-
mMatrix.postConcat(temp);
-
break;
-
case Sprite.TRANS_MIRROR_ROT90:
-
mMatrix.postConcat(temp);
-
mMatrix.setRotate(90,width/2, height/2);
-
break;
-
case Sprite.TRANS_MIRROR_ROT180:
-
mMatrix.postConcat(temp);
-
mMatrix.setRotate(180,width/2, height/2);
-
break;
-
case Sprite.TRANS_MIRROR_ROT270:
-
mMatrix.postConcat(temp);
-
mMatrix.setRotate(270,width/2, height/2);
-
break;
-
}
-
mMatrix.setTranslate(x_dest, y_dest);
-
canvas.drawBitmap(newMap, mMatrix, mPaint);
-
}
-
//图片Url保存为位图并进行缩放操作
-
//通过传入图片url获取位图方法
-
public Bitmap returnBitMap(String url) {
-
URL myFileUrl = null;
-
Bitmap bitmap = null;
-
try {
-
myFileUrl = new URL(url);
-
} catch (MalformedURLException e) {
-
e.printStackTrace();
-
}
-
try {
-
HttpURLConnection conn = (HttpURLConnection) myFileUrl
-
.openConnection();
-
conn.setDoInput(true);
-
conn.connect();
-
InputStream is = conn.getInputStream();
-
bitmap = BitmapFactory.decodeStream(is);
-
is.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
Log.v(tag, bitmap.toString());
-
return bitmap;
-
}
-
//通过传入位图,新的宽.高比进行位图的缩放操作
-
public static Drawable resizeImage(Bitmap bitmap, int w, int h) {
-
// load the origial Bitmap
-
Bitmap BitmapOrg = bitmap;
-
int width = BitmapOrg.getWidth();
-
int height = BitmapOrg.getHeight();
-
int newWidth = w;
-
int newHeight = h;
-
Log.v(tag, String.valueOf(width));
-
Log.v(tag, String.valueOf(height));
-
Log.v(tag, String.valueOf(newWidth));
-
Log.v(tag, String.valueOf(newHeight));
-
// calculate the scale
-
float scaleWidth = ((float) newWidth) / width;
-
float scaleHeight = ((float) newHeight) / height;
-
// create a matrix for the manipulation
-
Matrix matrix = new Matrix();
-
// resize the Bitmap
-
matrix.postScale(scaleWidth, scaleHeight);
-
// if you want to rotate the Bitmap
-
// matrix.postRotate(45);
-
// recreate the new Bitmap
-
Bitmap resizedBitmap = Bitmap.createBitmap(BitmapOrg, 0, 0, width,
-
height, matrix, true);
-
// make a Drawable from Bitmap to allow to set the Bitmap
-
// to the ImageView, ImageButton or what ever
-
return new BitmapDrawable(resizedBitmap);
-
}
-
1.图片加载方法,方便用户加载图片
-
/***
-
* 加载本地图片
-
* @param context:主运行函数实例
-
* @param bitAdress:图片地址,一般指向R下的drawable目录
-
* @return
-
*/
-
public final Bitmap CreatImage(Context context, int bitAdress) {
-
Bitmap bitmaptemp = null;
-
bitmaptemp = BitmapFactory.decodeResource(context.getResources(),
-
bitAdress);
-
return bitmaptemp;
-
}
-
2.图片平均分割方法,将大图平均分割为N行N列,方便用户使用
-
/***
-
* 图片分割
-
*
-
* @param g
-
* :画布
-
* @param paint
-
* :画笔
-
* @param imgBit
-
* :图片
-
* @param x
-
* :X轴起点坐标
-
* @param y
-
* :Y轴起点坐标
-
* @param w
-
* :单一图片的宽度
-
* @param h
-
* :单一图片的高度
-
* @param line
-
* :第几列
-
* @param row
-
* :第几行
-
*/
-
public final void cuteImage(Canvas g, Paint paint, Bitmap imgBit, int x,
-
int y, int w, int h, int line, int row) {
-
g.clipRect(x, y, x + w, h + y);
-
g.drawBitmap(imgBit, x – line * w, y – row * h, paint);
-
g.restore();
-
}
-
3.图片缩放,对当前图片进行缩放处理
-
/***
-
* 图片的缩放方法
-
*
-
* @param bgimage
-
* :源图片资源
-
* @param newWidth
-
* :缩放后宽度
-
* @param newHeight
-
* :缩放后高度
-
* @return
-
*/
-
public Bitmap zoomImage(Bitmap bgimage, int newWidth, int newHeight) {
-
// 获取这个图片的宽和高
-
int width = bgimage.getWidth();
-
int height = bgimage.getHeight();
-
// 创建操作图片用的matrix对象
-
Matrix matrix = new Matrix();
-
// 计算缩放率,新尺寸除原始尺寸
-
float scaleWidth = ((float) newWidth) / width;
-
float scaleHeight = ((float) newHeight) / height;
-
// 缩放图片动作
-
matrix.postScale(scaleWidth, scaleHeight);
-
Bitmap bitmap = Bitmap.createBitmap(bgimage, 0, 0, width, height,
-
matrix, true);
-
return bitmap;
-
}
-
4.绘制带有边框的文字,一般在游戏中起文字的美化作用
-
/***
-
* 绘制带有边框的文字
-
*
-
* @param strMsg
-
* :绘制内容
-
* @param g
-
* :画布
-
* @param paint
-
* :画笔
-
* @param setx
-
* ::X轴起始坐标
-
* @param sety
-
* :Y轴的起始坐标
-
* @param fg
-
* :前景色
-
* @param bg
-
* :背景色
-
*/
-
public void drawText(String strMsg, Canvas g, Paint paint, int setx,
-
int sety, int fg, int bg) {
-
paint.setColor(bg);
-
g.drawText(strMsg, setx + 1, sety, paint);
-
g.drawText(strMsg, setx, sety – 1, paint);
-
g.drawText(strMsg, setx, sety + 1, paint);
-
g.drawText(strMsg, setx – 1, sety, paint);
-
paint.setColor(fg);
-
g.drawText(strMsg, setx, sety, paint);
-
g.restore();
-
}
-
5.Android 图片透明度处理代码
-
/**
-
* 图片透明度处理
-
*
-
* @param sourceImg
-
* 原始图片
-
* @param number
-
* 透明度
-
* @return
-
*/
-
public static Bitmap setAlpha(Bitmap sourceImg, int number) {
-
int[] argb = new int[sourceImg.getWidth() * sourceImg.getHeight()];
-
sourceImg.getPixels(argb, 0, sourceImg.getWidth(), 0, 0,sourceImg.getWidth(), sourceImg.getHeight());// 获得图片的ARGB值
-
number = number * 255 / 100;
-
for (int i = 0; i < argb.length; i++) {
-
argb = (number << 24) | (argb & 0×00FFFFFF);// 修改最高2位的值
-
}
-
sourceImg = Bitmap.createBitmap(argb, sourceImg.getWidth(), sourceImg.getHeight(), Config.ARGB_8888);
-
return sourceImg;
-
}
-
6.图片翻转
-
Resources res = this.getContext().getResources();
-
img = BitmapFactory.decodeResource(res, R.drawable.slogo);
-
Matrix matrix = new Matrix();
-
matrix.postRotate(90); /*翻转90度*/
-
int width = img.getWidth();
-
int height = img.getHeight();
-
r_img = Bitmap.createBitmap(img, 0, 0, width, height, matrix, true);
-
import android.graphics.Bitmap;
-
import android.graphics.Canvas;
-
import android.graphics.LinearGradient;
-
import android.graphics.Matrix;
-
import android.graphics.Paint;
-
import android.graphics.PixelFormat;
-
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;
-
/**
-
*
-
* @author superdev
-
* @version 1.0
-
*
-
*/
-
public class ImageUtil {
-
/**
-
* 放大缩小图片
-
*/
-
public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {
-
int width = bitmap.getWidth();
-
int height = bitmap.getHeight();
-
Matrix matrix = new Matrix();
-
float scaleWidht = ((float) w / width);
-
float scaleHeight = ((float) h / height);
-
matrix.postScale(scaleWidht, scaleHeight);
-
Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
-
return newbmp;
-
}
-
/**
-
* 将Drawable转化为Bitmap
-
*/
-
public static Bitmap drawableToBitmap(Drawable drawable) {
-
int width = drawable.getIntrinsicWidth();
-
int height = drawable.getIntrinsicHeight();
-
Bitmap bitmap = Bitmap.createBitmap(width, height, drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
-
Canvas canvas = new Canvas(bitmap);
-
drawable.setBounds(0, 0, width, height);
-
drawable.draw(canvas);
-
return bitmap;
-
}
-
/**
-
* 获得圆角图片的方法
-
*/
-
public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {
-
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;
-
}
-
/**
-
* 获得带倒影的图片方法
-
*/
-
public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {
-
final int reflectionGap = 4;
-
int width = bitmap.getWidth();
-
int height = bitmap.getHeight();
-
Matrix matrix = new Matrix();
-
matrix.preScale(1, -1);
-
Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 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(bitmap, 0, 0, null);
-
Paint deafalutPaint = new Paint();
-
canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);
-
canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
ctF(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;
-
}
-
/**
-
* 获得带倒影的图片方法
-
*/
-
public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {
-
final int reflectionGap = 4;
-
int width = bitmap.getWidth();
-
int height = bitmap.getHeight();
-
Matrix matrix = new Matrix();
-
matrix.preScale(1, -1);
-
Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 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(bitmap, 0, 0, null);
-
Paint deafalutPaint = new Paint();
-
canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);
-
canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);