Created
April 11, 2011 07:04
-
-
Save jackypanster/e14a8428c57ae5c8a521 to your computer and use it in GitHub Desktop.
[Bitmap特效处理] 比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.android.tutor; | |
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; | |
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); | |
Paint paint = new Paint(); | |
LinearGradient shader = new LinearGradient(0, | |
bitmap.getHeight(), 0, bitmapWithReflection.getHeight() | |
+ reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP); | |
paint.setShader(shader); | |
// Set the Transfer mode to be porter duff and destination in | |
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); | |
// Draw a rectangle using the paint with our linear gradient | |
canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() | |
+ reflectionGap, paint); | |
return bitmapWithReflection; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment