`
anson_xu
  • 浏览: 512971 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等

阅读更多

Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等

 

 

 

大家好,这一节给大家分享的是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等.

 

废话少说了,直接讲解今天的实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理.大家按步骤一步一步来:

 

第一步:新建一个Android工程命名为ImageDemo,工程结构如下:

 

第二步:新建一个.java文件,命名为ImageUtil.java,在里面定义一些图片处理方法,代码如下:

 

view plaincopy to clipboardprint?

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;  

    }  

      

} 

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;

 }

 

}

 

 

第三步:修改main.xml布局文件,主要放了两个ImageView控件,代码如下:

 

view plaincopy to clipboardprint?

<?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/image01"   

        android:layout_width="wrap_content"   

        android:layout_height="wrap_content"   

        android:padding="10px" 

        />  

    <ImageView  

        android:id="@+id/image02" 

        android:layout_width="wrap_content"   

        android:layout_height="wrap_content"   

        android:padding="10px" 

    />  

</LinearLayout> 

<?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/image01"

     android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:padding="10px"

     />

 <ImageView

  android:id="@+id/image02"

  android:layout_width="wrap_content"

     android:layout_height="wrap_content"

     android:padding="10px"

 />

</LinearLayout>

 

 

第四步:修改主核心程序,ImageDemo.java,代码如下font-family

分享到:
评论

相关推荐

    Drawable Bitmap之间的转化

    本文将详细介绍如何在Android中实现`Drawable`与`Bitmap`之间的相互转换,并探讨这两种类型的图像数据在实际应用中的应用场景。 #### 一、Drawable简介 `Drawable`是Android中用于表示图形的一种抽象类,它可以是...

    Android Drawable Bitmap 相互转换

    以上就是关于Android中Drawable和Bitmap相互转换的方法、注意事项以及应用场景的详细解释。理解并熟练运用这些知识,能够帮助开发者更有效地处理图像资源,提高应用的性能和用户体验。在实际项目中,要根据具体需求...

    Android Drawable、Bitmap、byte、灰度 转换

    在Android开发中,图片资源的处理是常见的需求之一,涉及到多种数据类型之间的转换,包括`Drawable`、`Bitmap`、`byte[]`等。本文将详细介绍这些类型之间的转换方法,以及如何实现灰度图像的转换。 ### 1. `...

    自定义Drawable 实现图片圆角、圆形、椭圆形

    在Android中,Drawable是一种图形对象,可以用于绘制视图的背景、按钮图标等。系统提供了多种内置的Drawable类型,如Shape Drawable、Bitmap Drawable等。然而,当系统提供的Drawable无法满足特定需求时,就需要...

    Drawable Bitmap InputStream byte[]相互转化工具类

    在Android开发中,处理图像数据时,我们经常需要在Drawable、Bitmap、InputStream和byte数组之间进行转换。这些类型的转换在不同的场景下具有重要的作用,例如从网络加载图片、存储图片到本地或者显示在ImageView上...

    Android Drawable、Bitmap、byte、灰度 之间的转换

    在Android开发中,图片资源的处理是常见...以上就是关于Android中Drawable、Bitmap、byte数组以及灰度图像之间转换的详细介绍,这些转换方法在实际开发中有着广泛的应用,掌握它们能够帮助开发者更灵活地处理图像资源。

    android_Drawable、Bitmap、byte[]之间的转换.doc

    `Drawable`是Android中用于表示图像的一种抽象类,它并不直接表示图像数据,而是通过不同的子类来实现具体的图像功能。在某些场景下,我们需要将其转换为`Bitmap`格式以便于进一步处理。 ```java public static ...

    android 圆角图片+图片倒影

    在Android开发中,创建圆角图片和图片倒影是常见的需求,这主要涉及到图像处理和视图绘制的技术。本文将详细讲解如何在Android平台上实现这些功能。 首先,让我们来看看如何生成圆角图片。在Android中,我们可以...

    Bitmap,byte[],Drawable相互转化

    Drawable是Android中的一个抽象类,代表可以绘制的对象,它可以是BitmapDrawable(位图)、ShapeDrawable(形状)、LayerDrawable(图层)等多种形式。根据不同的需求,我们可以选择不同的Drawable类型进行绘制。...

    图片比例缩放以及bitMap转BitmapDrawable

    Bitmap是Android中表示位图图像的基本类,而BitmapDrawable是Drawable的一种,可以被设置为ImageView等视图的源。在某些场景下,例如设置自定义背景或者使用动画时,可能需要将Bitmap转换为BitmapDrawable。这可以...

    Android下利用Bitmap切割图片

    在Android中,我们可以使用BitmapFactory类来解析图片资源,将其转化为Bitmap对象。例如: ```java Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image); ``` 接下来,我们讨论...

    android中的drawable集合

    在Android开发中,Drawable是图形和图像处理的重要组成部分,它是一种可以绘制到Canvas上的对象,广泛用于界面元素的装饰和状态表示。以下是对Android中drawable集合的详细解释: 1. **Bitmap Drawable**: Bitmap ...

    Android编程中图片特效处理方法小结

    本文将深入探讨Android中图片转换、缩放、圆角以及倒影等特效的实现方法。 首先,我们来看一下如何将`Drawable`转换为`Bitmap`。在Android中,`Drawable`是一个抽象类,它代表了屏幕上的可视元素,而`Bitmap`则是一...

    通过将资源库图片转化为Bitmap,使用Zxing库完成多二维码识别

    在Android中,Bitmap是用于表示图像的一种内存高效的数据结构。你可以通过以下代码将图片资源转换为Bitmap: ```java Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image); ``` ...

    android Bitmap用法总结

    以上就是Android中Bitmap的一些常见用法,包括创建、转换、保存、缩放以及与ImageView的配合使用。在处理大量图片时,注意优化内存使用,避免OutOfMemoryError。合理运用上述方法可以有效地管理Bitmap资源,提高应用...

    android bitMap

    本文详细介绍了Android中`Bitmap` 的基本操作方法,包括从资源中加载、转换为字节数组、字节数组转换为`Bitmap`、缩放、将`Drawable` 转换为`Bitmap`以及获取圆角图片。这些操作对于处理图像数据非常重要,是每个...

Global site tag (gtag.js) - Google Analytics