`
xlover
  • 浏览: 244510 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

很好的一篇文章,如何实现图片倒影的效果

 
阅读更多

 

package com.lp.imageUI;  
  
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);  
        /** 
         * 画一个圆角矩形 
         * rectF: 矩形 
         * roundPx 圆角在x轴上或y轴上的半径 
         */  
        canvas.drawRoundRect(rectF, roundPx, roundPx+10, paint);  
        //设置两张图片相交时的模式  
        //setXfermode前的是 dst 之后的是src  
        //在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。   
        //如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint;  
        //PorterDuffXfermode就可以来解决这个问题  
        //canvas原有的图片 可以理解为背景 就是dst  
        //新画上去的图片 可以理解为前景 就是src  
//      paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT));  
        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();  
        // 图片缩放,x轴变为原来的1倍,y轴为-1倍,实现图片的反转  
        matrix.preScale(1, -1);  
        // 创建反转后的图片Bitmap对象,图片高是原图的一半。    
        Bitmap reflectionImage = Bitmap.createBitmap(bitmap,   
                0, height/2, width, height/2, matrix, false);  
        // 创建标准的Bitmap对象,宽和原图一致,高是原图的1.5倍。 可以理解为这张图将会在屏幕上显示 是原图和倒影的合体    
        Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888);  
         // 构造函数传入Bitmap对象,为了在图片上画图    
        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;  
    }  
      
}  
分享到:
评论

相关推荐

    Android拍照+图片处理(修正版)

    在Android开发中,图片拍摄和处理是常见的功能需求,尤其在社交、电商或者任何需要用户交互的App中。本文将详细解析"Android拍照+图片处理(修正...希望这篇文章能帮助开发者更好地掌握Android中的图片拍摄和处理技术。

    jquery二级下拉菜单导航代码9

    本篇文章将深入讲解如何使用jQuery实现带有倒影效果的二级下拉菜单导航,以及"jquery二级下拉菜单导航代码9"提供的具体实现。 首先,我们需要理解jQuery的基本用法。jQuery通过简洁的语法简化了DOM操作、事件处理、...

    一年级语文下册《小池塘》.ppt

    4. 想象力的培养:文章最后留有一个空白,让读者自己去填充,这是一个很好的启发式教学方法,鼓励孩子们发挥想象力,比如可以填写“柳树倒映在池塘里,像一串绿色的风铃”。这样的练习有助于培养孩子的创造性思维和...

    风雨湖春景作文.doc

    【风雨湖春景作文.doc】是一篇以春天的自然景色为题材的作文,标签为“范文”,意味着这是一篇可以作为写作范例的文章。通过部分内容,我们可以提炼出以下几个与写作、自然描绘和春天主题相关的知识点: 1. **季节...

    小学四年级语文阅读练习题含答案.pdf

    - 东西很多很好,眼睛来不及看,一时看不过来:目不暇接 3. 描写水中倒影的语句: - 那水里的山,比岸上的山更为清晰,而且因为水的流动,山也仿佛流动起来。山的姿态,也随着船的位置,不断变化。 4. 填空: -...

    中考语文满分作文水乡情调

    这篇中考满分作文“水乡情调”以细腻的笔触描绘了一个充满诗情画意的江南水乡景象,展现了作者深厚的文学功底...同时,这也是对学生如何运用语言艺术来表达个人情感和观察,以及如何在写作中创造意境的一次很好的示范。

    七年级语文三峡PPT教案.pptx

    《三峡》是七年级语文教学中的一篇重要课文,出自古代地理名著《水经注》。这篇课文主要介绍了三峡的壮丽景色和四季变化,同时也融入了作者郦道元的个人情感。以下是对课文主要内容的详细解析: 1. 文言知识积累:...

    鄂教版八年级下册《三峡》精题精练精选.doc

    《三峡》是鄂教版八年级下册语文教材中的一篇经典课文,出自北魏地理学家郦道元的《水经注》。这篇文章详细描绘了长江三峡——瞿塘峡、巫峡和西陵峡的壮丽景色,展示了四季变换中的自然风光。 1. 在基础知识点部分...

    三峡练习题及答案.doc

    《三峡》是古代地理学家郦道元在《水经注》中的一篇描绘三峡壮丽景色的文章。这篇文章详细描写了长江三峡的四季景象,展现了三峡的雄奇险峻和秀美。接下来,我们将根据题目逐个解答。 练习题一: 1. ① "虽乘奔御风...

    河北省唐山十八年级语文 第六单元 二六 三峡学案(无答案) 人教新课标版 学案.doc

    【知识点详解】 1. 文学常识 ...以上是对《三峡》这篇课文涉及的主要知识点的详细解析,包括作者介绍、课文背景、重要词汇注释、古今异义词以及句子翻译等内容,有助于理解和学习这篇文章的精髓。

    9 三峡(1).doc

    学生需要合作解决疑难问题,并通过比较《早发白帝城》和《三峡》两篇文章,发现它们如何描绘三峡的景色特色,以及《早发白帝城》中未提及的三峡特征。 5. **写景方法** - 描述景物时要抓住其特点,如《三峡》中...

    2015语文S版语文四下《五彩池》ppt课件4

    文档中还提供了多个链接,指向了PPT模板、素材、背景图片、图表等资源网站,这些资源可以帮助教师更好地准备和展示教学内容,提高课堂教学效果。 综上所述,《五彩池》这篇课文不仅介绍了五彩池这一自然奇观的美丽...

    2021年北京市中考语文文言文复习:三峡.pdf

    【三峡】是北魏时期地理学家郦道元在《水经注校证》中的选段,这篇文章具有极高的文学和教育价值。它是中国古代地理名著《水经注》的一部分,展现了南北朝时期散文的韵律美。文章采用骈散结合的文体,以四字句为主,...

    河北省唐山市第十六中学八年级语文上册 第六单元《三峡》练习题 新人教版

    《三峡》是古代文学家郦道元在《水经注》中的一篇文章,描绘了长江三峡的壮丽景色和四季变化。 【部分内容】包含了一些具体的练习题目,涉及到对原文的理解、古汉语词汇解释、诗词默写以及对文章内容的分析。以下是...

Global site tag (gtag.js) - Google Analytics