时间:2021-05-21
在 Android 的一些界面中,有时候我们需要为一副图片生成大小为 n * n 的缩略图,有时候需要的缩略图特殊一些,比如:
1、带圆角的缩略图:
如果我们需要带圆角的缩略图,但提供的图片是 n * n 的正方形的图片,该怎么办?这时候可以在贴图之前,先利用 Paint.setXfermode 方法来设置图片叠加时的混合模式,从而达到目的。一般而言,使用方法如下:
Paint paint = new Paint();paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XXX);canvas.drawBitmap(srcBmp, rc, rc, paint);关于 PorterDuff.Mode 的值,确定了 SrcBmp 和 DstBmp 交叠时像素的处理方式,其作用用一幅图片展示如下:
我们看出 SrcIn 这个模式,只保留 SrcBmp 和 DstBmp 直接的交集部分,并且只展现 SrcBmp 上这部分交集的内容。这个模式适合我们做带圆角的缩略图。我们先在 Canvas 上绘制一个实心圆角矩形,其他部分透明,然后用这个模式把缩略图再绘制到 Canvas 上即可:
Bitmap roundThumbBitmap = Bitmap.createBitmap( rc.width(), rc.height(), Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(roundThumbBitmap);Paint paint = new Paint();paint.setColor(0xFFFF0000); // 任何不透明的颜色均可。(作为掩码色)paint.setAntiAlias(true); // 开启抗锯齿,防止圆角毛躁.// 填充一个圆角矩形.final float radius = 5.0f;canvas.drawRoundRect(new RectF(rc), radius, radius, paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));canvas.drawBitmap(srcBmp, rc, rc, paint);做出的效果如下:
2、带 “卷角+圆角” 的缩略图:
有时候,我们需要为一张普通的图片生成 “卷角+圆角” 效果的图,像这样:
这时候,我们可以用两张辅助图来实现这个效果,一张底图做掩码,得到 “圆角+左上角切角” 的效果,然后用另一张图片覆盖在上面,得到 “灰色边框+右上角卷角” 的效果,我们需要的两张图如下:
代码如下:
Bitmap rollAngleThumbBmp = Bitmap.createBitmap(rc.width(), rc.height(), Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(rollAngleThumbBmp);Bitmap maskBmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.mask);Bitmap borderBmp = ((BitmapDrawable)context.getResources().getDrawable(R.drawable.border)).getBitmap();Paint paint = new Paint();paint.setAntiAlias(true);// 先贴掩码图.canvas.drawBitmap(maskBmp, rc, rc, paint);// 再用 SrcIn 的模式贴缩略图.paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));canvas.drawBitmap(srcBmp, rc, rc, paint);// 先取消 Xfermode.paint.setXfermode(null);// 再贴边框卷角图.canvas.drawBitmap(borderBmp, rc, rc, paint);得到的效果如下(看起来有些毛躁,纯属是我切的 mask 和 border 图片的问题,不是方法的问题):
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
复制代码代码如下://////为图片生成缩略图//////原图片的路径///缩略图宽///缩略图高///publicSystem.Drawing.ImageGe
本文实例讲述了C#简单生成缩略图的方法。分享给大家供大家参考。具体实现方法如下://////生成缩略图//////源图路径(物理路径)///缩略图路径(物理路径
复制代码代码如下:///生成缩略图//////源图路径///缩略图路径///缩略图宽度///缩略图高度///生成缩略图的方式:HW指定高宽缩放(可能变形);W指
本文实例讲述了python使用pil生成缩略图的方法。分享给大家供大家参考。具体分析如下:这段代码实现python通过pil生成缩略图的功能,会强行将图片大小修
//////生成缩略图//////源图路径(物理路径)///缩略图路径(物理路径)///缩略图宽度///缩略图高度///生成缩略图的方式publicstatic