现在的位置: 首页 > 综合 > 正文

Android图形图画学习(7)——drawBitmapMesh

2017年12月17日 ⁄ 综合 ⁄ 共 912字 ⁄ 字号 评论关闭

public void drawBitmapMesh (Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)

这是Canvas中定义的一个绘图函数,我们先介绍一下这个函数的用处和参数意义:

它表示将图像绘制在网格上,说得通俗一些,可以将画板想像成一张格子布(计算机图形学知识,在Opengl中有较明显的应用),在这张布上绘制图像。网格平铺在Bitmap上,通过控制网格顶点,达到控制操作位图像素点的目的。对于一个网格端点均匀分布的网格来说,横向有meshWidth+1个顶点,纵向有meshHeight+1个端点。 顶点数组verts 是以行优先的数组 (二维数组以一维数组表示,先行后列)。网格可以不均匀分布,参数定义如下:

   bitmap: 需要绘制在网格上的图像。
   meshWidth: 网格的宽度方向的数目(列数),为0时不绘制图像。
   meshHeight:网格的高度方向的数目(含数),为0时不绘制图像。
   verts: (x,y)对的数组,表示网格顶点的坐标,至少需要有(meshWidth+1) * (meshHeight+1) * 2 + meshOffset 个(x,y)坐标。
   vertOffset: verts数组中开始跳过的(x,y)对的数目。
   Colors: 可以为空,不为空为没个顶点定义对应的颜色值,至少需要有(meshWidth+1) * (meshHeight+1) * 2 + meshOffset 个(x,y)坐标。
   colorOffset: colors数组中开始跳过的(x,y)对的数目。
   paint: 可以为空


计算机图形学中,屏幕上所有的像素点都对应着一个坐标值,2D中是二维坐标,3D中还有一个深度坐标,因此是三维的。这些坐标值对应于内存中的某个存储区域,我们通过改变这个内存区域存储的关于这个像素点的属性值,从而在屏幕上表现为改变图形。


ApiDemo中的BitmapMesh.java的例子就是实现了翘曲画布的算法,通过改变verts的位置,从而改变bitmap。

抱歉!评论已关闭.