图像倒影

为图像添加倒影效果之后,图像看起来会有立体感,更有真实感,在Android中使用Matrix类可以很容易实现图像的倒影效果。主要是Matrix的preScale方法的使用,给它设置负数缩放比例,图像就会进行反转。然后通过设置Shader添加渐变效果。Java代码如下:

  private Bitmap getReflectedBitmap() {
    BitmapDrawable mBitmapDrawable = (BitmapDrawable) getResources().getDrawable(R.drawable.pet);
    Bitmap mBitmap = mBitmapDrawable.getBitmap();
    int width = mBitmap.getWidth();
    int height = mBitmap.getHeight();

    Matrix matrix = new Matrix();
    // 图片缩放,x轴变为原来的1倍,y轴为-1倍,实现图片的反转
    matrix.preScale(1, -1);

    // 创建反转后的图片Bitmap对象,图片高是原图的一半。
    // Bitmap mInverseBitmap = Bitmap.createBitmap(mBitmap, 0, height/2, width, height/2, matrix,
    // false);
    // 创建标准的Bitmap对象,宽和原图一致,高是原图的1.5倍。
    // 注意两种createBitmap的不同
    // Bitmap mReflectedBitmap = Bitmap.createBitmap(width, height*3/2, Config.ARGB_8888);

    Bitmap mInverseBitmap = Bitmap.createBitmap(mBitmap, 0, 0, width, height, matrix, false);
    Bitmap mReflectedBitmap = Bitmap.createBitmap(width, height * 2, Config.ARGB_8888);

    // 把新建的位图作为画板
    Canvas mCanvas = new Canvas(mReflectedBitmap);
    // 绘制图片
    mCanvas.drawBitmap(mBitmap, 0, 0, null);
    mCanvas.drawBitmap(mInverseBitmap, 0, height, null);

    // 添加倒影的渐变效果
    Paint mPaint = new Paint();
    Shader mShader = new LinearGradient(0, height, 0, mReflectedBitmap.getHeight(), 0x70ffffff,
        0x00ffffff, TileMode.MIRROR);
    mPaint.setShader(mShader);
    // 设置叠加模式
    mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
    // 绘制遮罩效果
    mCanvas.drawRect(0, height, width, mReflectedBitmap.getHeight(), mPaint);

    return mReflectedBitmap;
  }

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值