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开发中,图片拍摄和处理是常见的功能需求,尤其在社交、电商或者任何需要用户交互的App中。本文将详细解析"Android拍照+图片处理(修正...希望这篇文章能帮助开发者更好地掌握Android中的图片拍摄和处理技术。
本篇文章将深入讲解如何使用jQuery实现带有倒影效果的二级下拉菜单导航,以及"jquery二级下拉菜单导航代码9"提供的具体实现。 首先,我们需要理解jQuery的基本用法。jQuery通过简洁的语法简化了DOM操作、事件处理、...
4. 想象力的培养:文章最后留有一个空白,让读者自己去填充,这是一个很好的启发式教学方法,鼓励孩子们发挥想象力,比如可以填写“柳树倒映在池塘里,像一串绿色的风铃”。这样的练习有助于培养孩子的创造性思维和...
【风雨湖春景作文.doc】是一篇以春天的自然景色为题材的作文,标签为“范文”,意味着这是一篇可以作为写作范例的文章。通过部分内容,我们可以提炼出以下几个与写作、自然描绘和春天主题相关的知识点: 1. **季节...
- 东西很多很好,眼睛来不及看,一时看不过来:目不暇接 3. 描写水中倒影的语句: - 那水里的山,比岸上的山更为清晰,而且因为水的流动,山也仿佛流动起来。山的姿态,也随着船的位置,不断变化。 4. 填空: -...
这篇中考满分作文“水乡情调”以细腻的笔触描绘了一个充满诗情画意的江南水乡景象,展现了作者深厚的文学功底...同时,这也是对学生如何运用语言艺术来表达个人情感和观察,以及如何在写作中创造意境的一次很好的示范。
《三峡》是七年级语文教学中的一篇重要课文,出自古代地理名著《水经注》。这篇课文主要介绍了三峡的壮丽景色和四季变化,同时也融入了作者郦道元的个人情感。以下是对课文主要内容的详细解析: 1. 文言知识积累:...
《三峡》是鄂教版八年级下册语文教材中的一篇经典课文,出自北魏地理学家郦道元的《水经注》。这篇文章详细描绘了长江三峡——瞿塘峡、巫峡和西陵峡的壮丽景色,展示了四季变换中的自然风光。 1. 在基础知识点部分...
《三峡》是古代地理学家郦道元在《水经注》中的一篇描绘三峡壮丽景色的文章。这篇文章详细描写了长江三峡的四季景象,展现了三峡的雄奇险峻和秀美。接下来,我们将根据题目逐个解答。 练习题一: 1. ① "虽乘奔御风...
【知识点详解】 1. 文学常识 ...以上是对《三峡》这篇课文涉及的主要知识点的详细解析,包括作者介绍、课文背景、重要词汇注释、古今异义词以及句子翻译等内容,有助于理解和学习这篇文章的精髓。
学生需要合作解决疑难问题,并通过比较《早发白帝城》和《三峡》两篇文章,发现它们如何描绘三峡的景色特色,以及《早发白帝城》中未提及的三峡特征。 5. **写景方法** - 描述景物时要抓住其特点,如《三峡》中...
文档中还提供了多个链接,指向了PPT模板、素材、背景图片、图表等资源网站,这些资源可以帮助教师更好地准备和展示教学内容,提高课堂教学效果。 综上所述,《五彩池》这篇课文不仅介绍了五彩池这一自然奇观的美丽...
【三峡】是北魏时期地理学家郦道元在《水经注校证》中的选段,这篇文章具有极高的文学和教育价值。它是中国古代地理名著《水经注》的一部分,展现了南北朝时期散文的韵律美。文章采用骈散结合的文体,以四字句为主,...
《三峡》是古代文学家郦道元在《水经注》中的一篇文章,描绘了长江三峡的壮丽景色和四季变化。 【部分内容】包含了一些具体的练习题目,涉及到对原文的理解、古汉语词汇解释、诗词默写以及对文章内容的分析。以下是...