您的位置:首页 > 移动开发 > Android开发

Android --- 图片的特效处理

2013-10-21 21:00 357 查看

IT程序员开发必备-各类资源下载清单,史上最全IT资源,个人收藏总结!

Android --- 图片处理的方法



转换 - drawable To bitmap

缩放 - Zoom

圆角 - Round Corner

倒影 - Reflected

bitmapPrcess code:

[java] view
plaincopyprint?

package com.learn.games;

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 bitmapProcess {

// zoom

public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h){

int width = bitmap.getWidth();

int height = bitmap.getHeight();

Matrix matrix = new Matrix();

float scaleWidth = w/(float)width;

float scaleHeight = h/(float)height;

matrix.postScale(scaleWidth, scaleHeight);

Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);

return bitmap2;

}

// drawable to bitmap

public static Bitmap drawable2Bitmap(Drawable drawable){

int width = drawable.getIntrinsicHeight();

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;

}

// Round Corner Bitmap

public static Bitmap getRoundCornerBitmap(Bitmap bitmap, float roundPX){

int width = bitmap.getWidth();

int height = bitmap.getHeight();

Bitmap bitmap2 = Bitmap.createBitmap(width, height, Config.ARGB_8888);

Canvas canvas = new Canvas(bitmap2);

final int color = 0xff424242;

final Paint paint = new Paint();

final Rect rect = new Rect(0, 0, width, height);

final RectF rectF = new RectF(rect);

paint.setColor(color);

paint.setAntiAlias(true);

canvas.drawARGB(0, 0, 0, 0);

canvas.drawRoundRect(rectF, roundPX, roundPX, paint);

paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));

canvas.drawBitmap(bitmap, rect, rect, paint);

return bitmap2;

}

// Reflect Bitmap

public static Bitmap createReflectedBitmap(Bitmap bitmap){

final int reflectedGap = 4;

int width = bitmap.getWidth();

int height = bitmap.getHeight();

Matrix matrix = new Matrix();

matrix.preScale(1, -1);

Bitmap reflectedImage = Bitmap.createBitmap(bitmap, 0, height/2, width, height/2, matrix, false);

Bitmap reflectedBitmap = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888);

Canvas canvas = new Canvas(reflectedBitmap);

canvas.drawBitmap(bitmap, 0, 0, null);

Paint defaultPaint = new Paint();

canvas.drawRect(0, height, width, height + reflectedGap, defaultPaint);

canvas.drawBitmap(reflectedImage, 0, height + reflectedGap, null);

Paint paint = new Paint();

LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,

reflectedBitmap.getHeight() + reflectedGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);

paint.setShader(shader);

paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

canvas.drawRect(0, height, width, reflectedBitmap.getHeight() + reflectedGap, paint);

return reflectedBitmap;

}

}

Java Code:

[java] view
plaincopyprint?

package com.learn.games;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.drawable.BitmapDrawable;

import android.graphics.drawable.Drawable;

import android.os.Bundle;

import android.widget.ImageView;

public class MyBitmapProcessActivity extends Activity {

private ImageView imgView1;

private ImageView imgView2;

private ImageView imgView3;

private ImageView imgView4;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

drawBitmap();

}

private void drawBitmap(){

imgView1 = (ImageView)findViewById(R.id.imgView1);

imgView2 = (ImageView)findViewById(R.id.imgView2);

imgView3 = (ImageView)findViewById(R.id.imgView3);

imgView4 = (ImageView)findViewById(R.id.imgView4);

Drawable drawable = this.getWallpaper();

Bitmap bitmap = bitmapProcess.drawable2Bitmap(drawable); // drawable to bitmap

Bitmap zoomBitmap = bitmapProcess.zoomBitmap(bitmap, 100, 100); // zoom

Bitmap roundBitmap = bitmapProcess.getRoundCornerBitmap(zoomBitmap, 10.0f); // round corner

Bitmap reflectedBitmap = bitmapProcess.createReflectedBitmap(zoomBitmap); // reflect bitmap

// drawable to bitmap

imgView1.setImageBitmap(bitmap);

imgView2.setImageBitmap(zoomBitmap);

imgView3.setImageBitmap(roundBitmap);

imgView4.setImageBitmap(reflectedBitmap);

// bitmap to drawable

Drawable roundDrawable = new BitmapDrawable(roundBitmap);

Drawable reflectedDrawable = new BitmapDrawable(reflectedBitmap);

imgView1.setBackgroundDrawable(roundDrawable);

imgView2.setBackgroundDrawable(reflectedDrawable);

}

}

XML:

[html] view
plaincopyprint?

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<ImageView android:id="@+id/imgView1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

<ImageView android:id="@+id/imgView2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

<ImageView android:id="@+id/imgView3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

<ImageView android:id="@+id/imgView4"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

</LinearLayout>

效果图:

drawable2bitmap



zoom



round corner



reflected bitmap

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: