gpt4 book ai didi

android - 在 Android onDraw() 中直接绘制到 Canvas 和在位图上绘制然后 Canvas 之间的区别

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:00:34 25 4
gpt4 key购买 nike

我正在编写一个显示信号的自定义 View 。为了缩短我的 onDraw() 时间,我缓存了我到目前为止在位图中绘制的所有内容,并在每次 onDraw() 调用中附加到它。通过这样做,我可以节省大量时间,因为我一次只需要绘制几个固定元素,而不是重做整个事情。

但有一件事情困扰着我——直接在提供的 Canvas 上绘制比先在位图上绘制然后在 Canvas 上绘制位图提供了更“准确”的绘制。通过查看下图的下部,您可以看到不同之处:

Look at the lower part of the signal to see difference - there are the same drawLine calls

我在 https://github.com/gardarh/android-uglybitmapdrawing/ 上传了一个显示差异的演示项目但相关代码如下:

@Override
public void onDraw(Canvas canvas) {
if(cachedBitmap == null) {
cachedBitmap = Bitmap.createBitmap(getWidth(), 200, Config.ARGB_8888);
cachedCanvas = new Canvas(cachedBitmap);
}

for(int i = 0; i < COORDS.length; i++) {
float[] curCoords = COORDS[i];
canvas.drawLine(curCoords[0], curCoords[1], curCoords[2], curCoords[3], linePaint);
cachedCanvas.drawLine(curCoords[0], curCoords[1], curCoords[2], curCoords[3], linePaint);
}
canvas.drawBitmap(cachedBitmap, 0, 120, null);
}

为什么两条轨迹不一样,更重要的是,我怎样才能让下面的轨迹看起来像上面的轨迹?

最佳答案

之所以有区别,是因为 Canvas 绘制是通过硬件加速(GPU)完成的,而位图绘制是通过软件(CPU)完成的。如果禁用硬件加速,它们将变得完全相同。如果将 X 坐标乘以 10,您会发现不同之处在于线条的连接方式。这些是微小的一个像素差异,我不会理会它们。我不确定哪个更准确,它们的实现似乎略有不同。

关于android - 在 Android onDraw() 中直接绘制到 Canvas 和在位图上绘制然后 Canvas 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17025232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com