在Bitmap上绘制图元

时间:2011-06-15 09:06:15

标签: android drawing

在我的自定义视图中,当用户选择标记时,我必须在基本位图上绘制。假设我有一个基本的 face 位图,用户打开小胡子标志。由于此自定义视图必须是可伸缩的,因此我希望使用相对坐标(在[0,1]范围内)而不是位图宽度和高度。以下不起作用

Bitmap orig, face;

public void onDraw(Canvas c) {
  c.drawBitmap(face);
}

public void onMustacheFlag() {
  face = Bitmap.create(orig);
  Canvas c = new Canvas(face);
  c.save();
  c.scale(1f / face.getWidth(), 1f / face.getHeight());
  // Draw lines, circle, rectangles with all vertices in the range [0.0f, 1.0f]
  c.restore();
}

此外,此自定义视图强制高度等于宽度(它是方形外形)

1 个答案:

答案 0 :(得分:0)

Canvas.scale(float, float)的参数用作绘图程序中x e和y坐标的系数。传递1f / width意味着将范围(0,1)中假定的值乘以小于1的数字,因此所有绘制例程的结果都会在左上角结束,并且可能不可见。相反,如果我传递widthheight,代码将按预期工作,因为范围(0,1)映射到(0,宽度):

public void onMustacheFlag() {
  face = Bitmap.create(orig);
  Canvas c = new Canvas(face);
  c.save();
  c.scale(face.getWidth(), face.getHeight()); // instead of 1 / width
  // Draw lines, circle, rectangles with all vertices in the range [0.0f, 1.0f]
  c.restore();
}