使用画布将位图绘制为多边形

时间:2014-11-09 09:12:29

标签: android android-canvas android-custom-view

我有自定义视图。它有许多四边形(不是矩形)。我必须为每个四边形绘制位图。现在,我正在使用矩阵将位图绘制为四边形,但它是扭曲的。像这样:

float[] src = new float[] {
                            0.0f, 0.0f,
                            0.0f, (float) trimBitmap.getHeight(),
                            (float) trimBitmap.getWidth(), (float) trimBitmap.getHeight(),
                            (float) trimBitmap.getWidth(), 0.0f };
float[] dst = new float[] {
                            frame.get(0).x * ratio, frame.get(0).y * ratio,
                            frame.get(1).x * ratio, frame.get(1).y * ratio,
                            frame.get(2).x * ratio, frame.get(2).y * ratio,
                            frame.get(3).x * ratio, frame.get(3).y * ratio };

matrix.setPolyToPoly(src, 0, dst, 0, 4);
canvas.drawBitmap(trimBitmap, matrix, picturePaint);

我正在尝试使用BitmapShader,但不知道它是如何工作的? 对我有什么建议吗?

编辑我正在尝试像这样使用BitmapShader

Path path = new Path();

path.moveTo(picture.getFrame().get(0).x * ratio, picture.getFrame().get(0).y * ratio);
path.lineTo(picture.getFrame().get(1).x * ratio, picture.getFrame().get(1).y * ratio);
path.lineTo(picture.getFrame().get(2).x * ratio, picture.getFrame().get(2).y * ratio);
path.lineTo(picture.getFrame().get(3).x * ratio, picture.getFrame().get(3).y * ratio);
path.lineTo(picture.getFrame().get(0).x * ratio, picture.getFrame().get(0).y * ratio);

BitmapShader shader = new BitmapShader(trimBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
picturePaint.setShader(shader);
canvas.drawPath(path, picturePaint);

感谢。

0 个答案:

没有答案