zoukankan      html  css  js  c++  java
  • Android 图片处理的方法

    package com.img.util;

    import android.graphics.Bitmap;
    import android.graphics.Bitmap.Config;
    import android.graphics.Canvas;
    import android.graphics.LinearGradient;
    import android.graphics.Matrix;
    import android.graphics.Paint;
    import android.graphics.PixelFormat;
    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.Drawable;

    public class ImgUtil {
        
    // 放大缩小图片
        public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {
            
    int width = bitmap.getWidth();
            
    int height = bitmap.getHeight();
            Matrix matrix 
    = new Matrix();
            
    float scaleWidth = ((float) w / width);
            
    float scaleHeight = ((float) h / height);
            matrix.postScale(scaleWidth, scaleHeight);
            Bitmap newBmp 
    = Bitmap.createBitmap(bitmap, 00, 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(
    00, 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(00, bitmap.getWidth(), bitmap.getHeight());
            
    final RectF rectF = new RectF(rect);

            paint.setAntiAlias(
    true);
            canvas.drawARGB(
    0000);
            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, 
    00null);
            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;
        }
    }
    package com.img.util;

    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.widget.ImageView;

    public class MainActivity extends Activity {
        
    private ImageView mImageView01, mImageView02;

        @Override
        
    public void onCreate(Bundle savedInstanceState) {
            
    super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            setupViews();
        }

        
    private void setupViews() {
            mImageView01 
    = (ImageView) findViewById(R.id.image01);
            mImageView02 
    = (ImageView) findViewById(R.id.image02);

            
    // 获取壁纸返回值是Drawable
            Drawable drawable = getWallpaper();
            
    // 将Drawable转化为Bitmap
            Bitmap bitmap = ImgUtil.drawableToBitmap(drawable);
            
    // 缩放图片
            Bitmap zoomBitmap = ImgUtil.zoomBitmap(bitmap, 100100);
            
    // 获取圆角图片
            Bitmap roundBitmap = ImgUtil
                    .getRoundedCornerBitmap(zoomBitmap, 
    10.0f);
            
    // 获取倒影图片
            Bitmap reflectBitmap = ImgUtil
                    .createReflectionImageWithOrigin(zoomBitmap);
            
    // 这里可以让Bitmap再转化为Drawable
            
    // Drawable roundDrawable = new BitmapDrawable(roundBitmap);
            
    // Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);
            
    // mImageView01.setBackgroundDrawable(roundDrawable);
            
    // mImageView02.setBackgroundDrawable(reflectDrawable);

            mImageView01.setImageBitmap(roundBitmap);
            mImageView02.setImageBitmap(reflectBitmap);
        }
    }
  • 相关阅读:
    HTML4如何让一个DIV居中对齐?float输入日志标题
    HTML3层叠样式表
    面向对象 学生考试计分题目
    C#总复习
    HTML2列表表单框架
    HTML1网页三部份内容
    HTML 5 JavaScript初步 编译运行.doc
    初识MYSQL
    数据库设计
    序列化和反序列化
  • 原文地址:https://www.cnblogs.com/oakpip/p/2055484.html
Copyright © 2011-2022 走看看