Android中几种图像特效处理的集锦

文章未转载,原文地址:http://my.eoe.cn/androidtutor/archive/2021.html

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



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



第一步:新建一个Android工程命名为ImageDemo,工程结构如下:
0_1288675235KEv5.gif.jpg

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





  1

  2

  3

  4

  5

  6

  7

  8

  9

 10

 11

 12

 13

 14

 15

 16

 17

 18

 19

 20

 21

 22

 23

 24

 25

 26

 27

 28

 29

 30

 31

 32

 33

 34

 35

 36

 37

 38

 39

 40

 41

 42

 43

 44

 45

 46

 47

 48

 49

 50

 51

 52

 53

 54

 55

 56

 57

 58

 59

 60

 61

 62

 63

 64

 65

 66

 67

 68

 69

 70

 71

 72

 73

 74

 75

 76

 77

 78

 79

 80

 81

 82

 83

 84

 85

 86

 87

 88

 89

 90

 91

 92

 93

 94

 95

 96

 97

 98

 99

100

    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控件,代码如下:





 1

 2

 3

 4

 5

 6

 7

 8

 9

10

11

12

13

14

15

16

17

18

19

    <?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,代码如下:





 1

 2

 3

 4

 5

 6

 7

 8

 9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

    package com.android.tutor;  

    import android.app.Activity;  

    import android.graphics.Bitmap;  

    import android.graphics.drawable.Drawable;  

    import android.os.Bundle;  

    import android.widget.ImageView;  

    public class Imagedemo extends Activity {  

        private ImageView mImageView01,mImageView02;  



        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 = ImageUtil.drawableToBitmap(drawable);  

            //缩放图片  

            Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100, 100);  

            //获取圆角图片  

            Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f);  

            //获取倒影图片  

            Bitmap reflectBitmap = ImageUtil.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);  

        }  





    }  

第五步:运行上述工程,查看效果如下:
0_1288675491QAZM.gif.jpg


声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息

原文作者: Android_Tutor

原文地址: http://my.eoe.cn/androidtutor/archive/2021.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
旅游社交小程序功能有管理员和用户。管理员有个人心,用户管理,每日签到管理,景点推荐管理,景点分类管理,防疫查询管理,美食推荐管理,酒店推荐管理,周边推荐管理,分享圈管理,我的收藏管理,系统管理。用户可以在微信小程序上注册登录,进行每日签到,防疫查询,可以在分享圈里面进行分享自己想要分享的内容,查看和收藏景点以及美食的推荐等操作。因而具有一定的实用性。 本站后台采用Java的SSM框架进行后台管理开发,可以在浏览器上登录进行后台数据方面的管理,MySQL作为本地数据库,微信小程序用到了微信开发者工具,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得旅游社交小程序管理工作系统化、规范化。 管理员可以管理用户信息,可以对用户信息添加修改删除。管理员可以对景点推荐信息进行添加修改删除操作。管理员可以对分享圈信息进行添加,修改,删除操作。管理员可以对美食推荐信息进行添加,修改,删除操作。管理员可以对酒店推荐信息进行添加,修改,删除操作。管理员可以对周边推荐信息进行添加,修改,删除操作。 小程序用户是需要注册才可以进行登录的,登录后在首页可以查看相关信息,并且下面导航可以点击到其他功能模块。在小程序里点击我的,会出现关于我的界面,在这里可以修改个人信息,以及可以点击其他功能模块。用户想要把一些信息分享到分享圈的时候,可以点击新增,然后输入自己想要分享的信息就可以进行分享圈的操作。用户可以在景点推荐里面进行收藏和评论等操作。用户可以在美食推荐模块搜索和查看美食推荐的相关信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值