深入解析Android中的Canvas、Paint与Bitmap、BitmapFactory类

更新:11-24 现代故事 我要投稿 纠错 投诉

大家好,今天来为大家分享深入解析Android中的Canvas、Paint与Bitmap、BitmapFactory类的一些知识点,和的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

setColor(int color) 设置颜色值

setAntiAlias(boolean aa) 抗锯齿

setStrokeWidth(浮动宽度);当画笔样式为STROKE或FILL_OR_STROKE时,设置画笔的粗细

setShader(Shader 着色器);设置图像效果,使用Shader绘制各种渐变效果

setSrokeJoin(Paint.Join 连接);设置绘图时组合图形的方式,如平滑效果等。

setStrokeCap(Paint.Cap cap);当画笔样式为STROKE或FILL_OR_STROKE时,设置画笔的图形样式,如圆形样式Cap.ROUND,或方形样式Cap.SQUARE

setStyle(Paint.Style style): 填充样式

Paint.Style.FILL 填充内部

Paint.Style.FILL_AND_STROKE 填充内部和描边

仅Paint.Style.STROKE 笔划

setShadowLayer(float radius, float dx, float dy, int color) 添加阴影radius: 阴影倾斜、dx: 水平位移、dy: 垂直位移

setDither(布尔抖动);是否使用图像抖动处理会让绘制的画面色彩更加平滑饱满,图像更加清晰

setMaskFilter(MaskFilter maskfilter);可以使用不同的MaskFilter来实现滤镜效果,比如滤镜、立体等。

setPathEffect(PathEffecteffect): PathEffect用于控制绘制轮廓(线条)的方式

CornerPathEffect //将线段之间的角度转换为圆角,参数表示半径

DashPathEffect //用于绘制虚线路径。第一个参数表示虚线的长度和虚线之间的距离。参数是一个浮点数组。数组的长度必须大于2,即必须指定虚线的长度,并且必须指定虚线之间的间隔。这两个参数是偏移量,不断变化以显示虚线来回移动的效果。

ComposePathEffect //将两个特效组合在一起。第一个参数必须是形状特效DashPathEffect或PathDashPathEffect,第二个参数是外观特效CornerPathEffect对象。

setXfermode(Xfermode xfermode);设置图形重叠时的处理方式,如合并、交集或并集。它通常用于创建橡皮擦效果。

//文字绘制部分

setFakeBoldText(布尔fakeBoldText);模拟粗体文字,设置小字体效果会很差

setSubpixelText(布尔subpixelText);将此项目设置为true 将有助于在LCD 屏幕上显示文本

setTextAlign(Paint.Align 对齐);设置绘制文本的对齐方向

setTextScaleX(浮点scaleX);设置绘制文字时x轴的缩放比例,可以达到拉伸文字的效果。

setTextSize(浮动文本大小);设置绘制文本的字体大小

setTextSkewX(浮点skewX);设置斜体文本,skewX为倾斜弧度

setTypeface(Typeface 字体);设置Typeface对象,即字体样式,包括粗体、斜体、衬线、非衬线等。

setUnderlineText(布尔下划线文本);设置文字下划线效果

setStrikeThruText(布尔strikeThruText);设置带删除线的效果

measureText(String text) 测量文本并返回文本宽度

Bitmap类(对位图进行一系列的拉伸缩放,压缩等操作)

createBitmap(Bitmap src) 使用src作为原始图像生成不可变的新图像

createBitmap(int width, int height, Bitmap.Config config) 创建指定格式和大小的位图

createBitmap(int[] color, int width, int height, Bitmap.Config config) 获取整张图片的颜色集并绘制指定宽度和高度的图片

createBitmap(Bitmap source, int x, int y, int width, int height) 使用source作为原始图像,创建一个新图像,并指定起始坐标以及新图像的高度和宽度。

createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter) 使用src 作为原始图像,创建一个新图像,并指定新图像的高度和宽度以及是否可变。

getWidth() 获取位图的宽度

getHeight() 获取位图的高度

recycle() 回收位图占用的内存空间,并将位图标记为Dead

isRecycled() 判断位图内存是否已被释放

isMutable() 图片是否可以修改

getScaledWidth(Canvas canvas) 获取图像经过指定密度转换后的宽度

getScaledHeight(Canvas canvas) 获取图像经过指定密度转换后的高度

getPixels(int[] Pixels, int offset, int stride, int x, int y, int width, int height) 将所有像素值复制到pixels数组,offset数组中的第一个下标,

compress(compressFormat format, intquality,OutputStreamstream) 根据指定的图像格式和图像质量将图像压缩、转换为输出流。

格式:Bitmap.compressFormat.PNG 或Bitmap.compressFormat.JPEG

quality:图像质量,0-100.0代表最低质量压缩,100代表最高质量压缩。对于无损格式(例如PNG)的图像,此设置将被忽略。

BitmapFactory类 (创建位图对象从不同的来源,包括文件、流和字节数组)

decodeByteArray(byte[] data, int offset, int length, BitmapFactory.Options opts) 从字节数组解码以生成不可变位图

decodeFile(String pathName, BitmapFactory.Options opts) 读取文件并获取位图

decodeResource(Resources res, int id) 读取资源文件并获取位图

解码资源(资源res,int id,BitmapFactory.Options opts)

decodeStream(InputStream is) 从输入流中解码位图

选项参数类:

如果inJustDecodeBounds——设置为true,则不会获取图像,也不会分配内存,但会返回图像的高宽信息。

inSampleSize—— 图像缩放的倍数。如果设置为4,则宽度和高度均为原始尺寸的1/4,图像为原始尺寸的1/16。

outWidth—— 获取图像的宽度值

outHeight—— 获取图像的高度值

inDensity—— 位图使用的像素压缩比

inTargetDensity—— 用于目标位图(要生成的位图)的像素压缩比

inScaled——设置为true时进行图像压缩,从inDensity到inTargetDensity

Drawable类

绘制(Canvas canvas) 绘制到画布

setBounds(int left, int top, int right, int Bottom) 设置绘制位图左上角的坐标、宽度和高度

Canvas类

//抽取点数

drawPoint(float x, float y, Paint 油漆);画一个点,x坐标,y坐标,Paint对象

drawPoints(float[] pts, Paint 油漆);绘制多个点,pts坐标点的集合,每两个值组成一个xy坐标点

drawPoints(float[] pts, int offset, int count, Paint 油漆);绘制多个点,pts坐标集,每两个值是一个xy坐标点,offset和count表示从offset下标开始绘制count坐标

//画线

DrawLine(浮动startX,浮动startY,浮动stopX,浮动stopY,油漆油漆);画一条线

drawLines(float[] pts, Paint 油漆);绘制多条线,每组pts中的四个值标记一条线

drawLines(float[] pts, int offset, int count, Paint 油漆);绘制多条线,offset和count表示以pts为单位从offset开始的计数值。

//画一个圆

drawCircle(float cx, float cy, float radius, Paint 油漆);画圆,xy坐标为圆心距x,cy坐标为圆心距cy,半径radius

//画一个矩形

drawRect(向左浮动、向上浮动、向右浮动、向下浮动、Paint Paint);画一个矩形,左上角xy坐标,右下角xy坐标

drawRect(RectF rect, Paint Paint) 绘制一个矩形,rect是一个矩形对象

drawRoundRect(RectF rect, float rx, float ry, Paint Paint) 绘制圆角矩形

//画圆弧

drawArc(RectF oval, float startAngle, float swingAngle, boolean useCenter, Paint 油漆);画圆弧,顺时针方向,椭圆矩形区域,startAngle起始角度,sweepAngle偏移角度,usecenter true圆弧终点与中心点相连,false不相连,

//椭圆形

drawOval(RectF oval, Paint Paint) 绘制椭圆

//小路

drawPath(Path path, Paint Paint) 绘制路径

//画图

drawPicture(图片图片) 绘制图片

drawPicture(Picture picture, RectF dst) 在指定区域绘制图片

//绘制文本

drawText(String text, int start, int end, float x, float y, Paint Paint) 绘制文本xy 为基线坐标

drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint Paint) 绘制路径文本hOffset 水平偏移vOffset 垂直偏移

drawTextOnPath(char[] text, int index, int count, Path 路径, float hOffset, float vOffset, Paint 油漆)

//位图

drawBitmap(Bitmap 位图、Matrix 矩阵、Paint 涂料)

drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint Paint) 将图片从一个指定区域绘制到另一个指定区域

drawBitmap(Bitmap位图,左浮动,上浮动,Paint绘制)

//扭曲图像

drawBitmapMesh(位图位图,int meshWidth,int meshHeight,float[] verts,int vertOffset,int[]颜色,int colorOffset,Paint Paint):

bitmap: 要扭曲的原始图像

meshWidth: 原始头像的扭曲宽度

meshHeight: 原始头像的扭曲高度

verts: 扭曲区域的像素坐标

vertOffset: verts数组的偏移量,一般设置为0

color: 扭曲区域像素的颜色,可以设置为null

colorOffset: 颜色数组的偏移量

translate(float dx, float dy) 平移xy 为移动距离

scale(float sx, float sy),分别为x轴和y轴的缩放比例

scale(float sx, float sy, float px, float py),x.y轴的缩放比例,px,py表示缩放中心位置

旋转(浮动度数),旋转角度(顺时针)

文章分享结束,深入解析Android中的Canvas、Paint与Bitmap、BitmapFactory类和的答案你都知道了吗?欢迎再次光临本站哦!

用户评论

厌归人

Android开发真的需要这些底层的东西啊!

    有18位网友表示赞同!

请在乎我1秒

想画点东西在app里展示,这教程看着应该很实用。

    有16位网友表示赞同!

Hello爱情风

canvas是安卓绘图的核心吧?之前怎么没好好了解过呢。

    有9位网友表示赞同!

呆萌

paint用来调节画笔样式和颜色,太贴心了!

    有9位网友表示赞同!

龙吟凤

Bitmap是什么概念呢?看起来挺重要的啊。

    有17位网友表示赞同!

予之欢颜

BitmapFactory的学习应该会解锁很多图片处理的功能吧?

    有7位网友表示赞同!

∞◆暯小萱◆

感觉这篇文章能让我入门Android图形绘制了。

    有18位网友表示赞同!

矜暮

期待了解更多关于Android绘图技巧!

    有14位网友表示赞同!

花菲

这个知识点好难啊,需要多看几遍理解。

    有5位网友表示赞同!

鹿先森,教魔方

Android开发越来越有趣了!

    有10位网友表示赞同!

╭摇划花蜜的午后

终于找到一个入门Android绘图的教程了!

    有15位网友表示赞同!

病态的妖孽

学习这些底层类真的能提升代码水平!

    有15位网友表示赞同!

无关风月

感谢分享这篇文章,期待继续学习!

    有6位网友表示赞同!

tina

感觉要好好整理一下Android图形绘制的相关知识点。

    有18位网友表示赞同!

你tm的滚

以后开发app可以自己定制画笔了!真棒!

    有6位网友表示赞同!

将妓就计

这些类之间的关系也很重要吧?需要多理解一下。

    有7位网友表示赞同!

拥菢过后只剰凄凉

从基础开始学习,慢慢掌握Android绘图技能!

    有11位网友表示赞同!

陌上花

好想尝试把自己的想法用代码绘制出来呢!

    有10位网友表示赞同!

?娘子汉

希望这篇文章能帮助到更多Android开发者!

    有13位网友表示赞同!

裸睡の鱼

安卓开发知识点真多啊!

    有11位网友表示赞同!

【深入解析Android中的Canvas、Paint与Bitmap、BitmapFactory类】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:探寻春日里的动人篇章:我与种子的生命之旅 下一篇:返回列表