我想在矩形上绘制位图。我使用以下值:

    this.meshWidth = 1;
    this.meshHeight = 1;
    this.verts = new float[8];
    this.points[0].x = (float)(this.getWidth()/4);
    this.points[0].y = (float)(this.getHeight()/4);
    this.points[1].x = (float)(this.points[0].x+this.getWidth()/2);
    this.points[1].y = (float)(this.points[0].y);
    this.points[2].x = (float)(this.points[0].x);
    this.points[2].y = (float)(this.points[0].y+this.getHeight()/2);
    this.points[3].x = (float)(this.points[1].x);
    this.points[3].y = (float)(this.points[2].y);

点数组是我的顶点数组。

我的 onDraw 方法
public void onDraw(Canvas canvas){
    //canvas.drawBitmap(bitmap, 20,20, null);
    Paint paint = new Paint();
    paint.setColor(Color.BLUE);
    canvas.drawLine(this.points[0].x, this.points[0].y, this.points[1].x, this.points[1].y, paint);
    canvas.drawLine(this.points[1].x, this.points[1].y, this.points[3].x, this.points[3].y, paint);
    canvas.drawLine(this.points[3].x, this.points[3].y, this.points[2].x, this.points[2].y, paint);
    canvas.drawLine(this.points[2].x, this.points[2].y, this.points[0].x, this.points[0].y, paint);
    canvas.drawBitmapMesh(this.bitmap, meshWidth, meshHeight, verts, 0, null, 0, null);
}

输出是这个

我想在用蓝线包围的矩形上绘制位图..

最佳答案

您可以在 Android 开发人员文档中找到了解 DrawBitmapMesh 函数所需的一切。见 Android developer documentation

但是,我将在这里用我自己的话来解释它。该函数的语法是:

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

位图显然是您要使用的位图。现在想象在位图上有一个网格,网格宽度+1 点沿着图像的行,网格高度+1 点沿着位图的列。您可以在 verts 变量中指定这些点或顶点。这些以行优先格式输入,这意味着您在 vert 中从左到右输入第 1 行的顶点,然后从左到右为第 2 行输入顶点,依此类推,即如果我们有 4 x 4 个点,那么我们有一些东西像这样:

*01 *02 *03 *04

*05 *06 *07 *08

*09 *10 *11 *12

*13 *14 *15 *16

其中 *n 是一个顶点 (x, y),其坐标适本地放置在位图图像上。您可以将 vert 数组定义为:
vert[0] = (*01).x;
vert[1] = (*01).y;
vert[2] = (*02).x;
vert[3] = (*02).y;
...

如果要在位图上均匀分布这些点,则理论上drawBitmapMesh将提供与drawBitmap函数相同的输出。但是,如果您将这些顶点从它们的“自然”位置移开,则 drawBitmapMesh 将开始按照规范拉伸(stretch)位图。

您可以像在示例中所做的那样,将剩余的函数参数分别设置为 0、null、0、null。

10-08 12:07