关于bitmap,canvas ,drawable

Bitmap详解

1.Bitmap与Canvas,Drawable的关系

Bitmap代表的是内存中实际存储色值的一块内存,所以展现在屏幕上的图像的数据都是来源于它。
Canvas代表一个画布,它能够在上面绘制各种Drawable,但其背后持有一个Bitmap,也就是绘制在上面的内容,最终的数据都是保存在Bitmap中。
Drawable代表可以被绘制的一种东西。

所以,当我们将一个BitmapDrawable绘制到一张画布上时,实际上是将BitmapDrawable中的Bitmap数据,以某种形式加入到Canvas背后的Bitmap中。

可参阅:
Canvas.setBitmap(…)
Bitmap.mNativeBitmap

  1. 如何生成一个Bitmap

从BitmapDrawalbe.getBitmap()获取
从文件解析出来BitmapFactory.decodeFile
从资源文件中解析出来BitmapFactory.decodeResource
从字节数组 BitmapFactory.decodeByteArray
从流中解析 BitmapFactory.decodeStream
基于现有的Bitmap来创建 Bitmap.createBitmap
基于像素颜色来创建 Bitmap.createBitmap
3. Bitmap.Config

用于控制存储色值的格式
ALPHA_8
RGB_565
ARGB_4444,
ARGB_8888

  1. Bitmap.CompressFormat

压缩格式:用于将位图保存到文件系统上时使用。
JPEG
PNG
WEBP

  1. Bitmap的一些转化

利用Bitmap.compress 来获取一个OutputStream
然后OutputStream可以用于获取byte[] : output.toByteArray
使用FileOutputStream可将数据写入到File里面.
使用Uri.fromFile将其转化为Uri(可用于Intent.setData)
使用BitmapDrawable 的构造方法来生成Drawable.

Drawable的种类

Java名称 XML名称
StateListDrawable
LevelListDrawable
LayerDrawable
TransitionDrawable
ColorDrawable
GradientDrawable
ScaleDrawable
ClipDrawable
RotateDrawable
AnimatedRotateDrawable
AnimationDrawable
InsetDrawable
BitmapDrawble
NinePatchDrawable
Canvas

1.Canvas是什么

Canvas也就是画布,可以用来绘制各种类型的图案。
实际的内容会保存到其含有的Bitmap中。

在View的onDraw()方法中,会传入一个Canvas,然后你可以使用这个Canvas来进行各种图形的绘制。

2.控制Canvas的两个方法

setMatrix
setDrawFilter

矩阵可以用于做各种变换:如缩放,位移,旋转等等。
而绘制过滤器则用于改变paint实际作用与画布的效果。

3.Canvas中最主要的一类方法就是:

drawXXX

绘制颜色 drawRGB ,drawARGB ,drawColor
绘制点 drawPoints, drawPoint
绘制线 drawLine,drawLines
绘制矩形 drawRect
绘制椭圆 drawOval
绘制圆 drawCircle
绘制弧形 drawArc 三点钟为0°,顺时针增加
绘制圆角矩形 drawRoundRect
绘制路径 drawPath
绘制补丁 drawPatch 通常就是.9PNG图
绘制位图 drawBitmap
绘制文本 drawText

猜你喜欢

转载自blog.csdn.net/qq_23343197/article/details/78641120