假设我们有一个400x800的画布,我想绘制一条连接点的线 P1(10,10)和P2(500000,800000)。 正如您所看到的,第二点远远超出画布边界。如果我使用canvas.darwLine(p1.x,p1.y,p2.x,p2.y,paint),应用程序会冻结,应用程序将无法使用。 使用裁剪并没有解决问题,绘图引擎仍然试图将像素绘制到第二点的整个方式
有任何建议或解决方法吗?
答案 0 :(得分:2)
如果P2在可见区域之外(在这种情况下为480x800)则计算该线与边界的交点,然后使用交点而不是P2。
答案 1 :(得分:0)
您可以使用以下内容缩小您的行:
int maxX = 400;
int maxY = 800;
//Calculate how much we have to scale down to fit in the bounds:
float scaleX = (maxX - p1.x)/p2.x;
float scaleY = (maxY - p1.y)/p2.y;
//Get the smallest scale, so that we fit in both axises.
float scale = Math.min(scaleX, scaleY);
//Only scale if we are scaling down. There is no need to make lines smaller than the screen scale up to the screen bounds:
if(scale < 1.0f){
p2.x *= scale;
p2.y *= scale;
}
我没试过这个,所以我不能保证它会起作用。