在硬件加速下缩放画布时,偏移路径模糊

2023-11-26

我的应用程序使用可缩放的画布,以便我可以以米而不是像素为单位指定路径点。当我缩放画布时,然后使用画一条线path.lineTo(),打开硬件加速后,线条变得模糊且偏移。关闭硬件加速或使用硬件加速时不会发生这种情况canvas.drawLine().

这是重现问题的代码:

package com.example.canvasproblem;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(new MyView(this));
    }

    class MyView extends View {
        Paint pen = new Paint();
        public MyView(Context context) {
            super(context);
            pen.setStyle(Paint.Style.STROKE);
            pen.setStrokeWidth(1f); // 1 meters wide
            //this.setLayerType(LAYER_TYPE_SOFTWARE, null);
        }
        protected void onDraw(Canvas canvas) {
            float width_meter = 10.0f; // width of canvas in meters
            float width_pxl = canvas.getWidth(); // width of canvas in pixels
            float height_pxl = canvas.getHeight(); // height of canvas in pixels

            canvas.save();
            canvas.translate(width_pxl/2, height_pxl/2); // make center of canvas (0,0)
            canvas.scale(width_pxl/width_meter, width_pxl/width_meter); // convert to meters

            // path
            Path path = new Path();
            path.moveTo(0, 0);
            path.lineTo(0, 4);
            canvas.drawPath(path, pen);

            // line
            canvas.drawLine(0, 0, 0, 4, pen);

            canvas.restore();
        }
    }
}

这是问题输出的屏幕截图(正确的drawLine()显示在lineTo()之上):

截图.png

硬件是 1024x768 平板电脑,运行 android 4.1.1。处理器是Rockchip RK30。

我的偏好是使用带有硬件加速的路径,以实现点和速度之间的圆角连接。如果我做错了什么导致这个问题,请告诉我。谢谢

温柔一点,这是我的第一篇文章。


这是硬件加速渲染器的限制。路径在变换之前按其原始大小进行光栅化。在您的例子中,路径将转换为 1x4 纹理。然后在绘制时缩放该纹理。要解决此问题,请使用直接缩放路径Path.transform(Matrix)。您还可以在构建路径时使用缩放坐标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在硬件加速下缩放画布时,偏移路径模糊 的相关文章

随机推荐

  • 删除R中tmap中的图例

    我有一个简单的问题 如何删除 R 中 tmap 中自动添加的图例 在这种情况下 我想删除右侧描述 级别 的图例 这是我尝试过的 tm shape densities polygons tm polygons col level palett
  • matlab:将向量划分为固定大小的重叠块

    我有一个向量 我想将其拆分为大小重叠的子向量cs轮流在sh 想象输入向量是 v 1 2 3 4 5 6 7 8 9 10 11 12 13 A 1 13 given a chunksize of 4 cs 4 和 2 sh 2 结果应如下所
  • 调用未定义函数curl_init()错误

    我在 Win 64 位操作系统 php 5 6 8 上使用 Eclipse PDT 来开发 PHP 我遇到过 Call to undefined function curl init 错误 我删除了 前extension php curl
  • D3D11:如何绘制简单的像素对齐线?

    我尝试用 D3D11 在两个顶点之间画一条线 我在 D3D9 和 D3D11 中有一些经验 但在 D3D11 中绘制一条线 从一个给定像素开始并以另一个像素结束 似乎是一个问题 我做了什么 我向每个顶点的像素坐标添加了 0 5f 以适应纹素
  • CakePHP如何通过ID数组获取多行

    我想根据 ID 数组列表从数据库中提取多行 在其他一些框架中似乎有类似 WHERE IN 的东西 但这里没有 有人可以告诉我该怎么做吗 我想知道如何通过 find 或 read 或任何其他 cakephp 函数 来做到这一点 而不是手动构建
  • Rails 库包括

    关于 lib 目录中定义的模块 我有一个令人费解的问题 我有两个文件 lib authentication rb module Authentication end lib test module rb module TestModule
  • HttpServlet 类与 Jersey 一起使用之间的混淆

    我正在构建实现 RESTful API 的 servlet 我知道 Jersey 是一个用于破译和使用给定 URL 的框架 我如何将它与HttpServlet class 我不明白两者如何相互合作 我想这是一个非常笼统的问题 但我已经阅读了
  • Python google Drive API下载,文件在哪里?

    我使用此处找到的 python 代码在谷歌驱动器上下载文件 https developers google com drive v3 web manage downloads我有这个范围 https www googleapis com a
  • GridView.scrollTo() 的解决方法?

    如上所述here Android的GridView scrollTo 不起作用 解决方案提到的方法 setSelectedPosition 似乎不存在于GridView smoothScrollToPosition确实有效 但我真的不想要动
  • pyqt qt4 QTableView如何禁用某些列的排序?

    所以我有一个 QTableView 我只想让列排序在第 1 列而不是第 2 列 自然地我尝试installEventFilter on QHeaderView or QTableView but MouseButtonPress事件不会被传
  • Rails link_to 方法: :delete

    我很抱歉问了一个可能是补救问题的问题 但在学习 Rails 时 我试图遵循本教程中的注释 http guides rubyonrails org getting started html 昨晚我在本教程中发布了一个类似的问题 并得到了及时的
  • Django 模板中的字典

    我有这样的看法 info dict u Question 1 13365 13344 u Question 2 13365 u Question 3 for key in info dict for k v in key items pro
  • JSON.NET 作为 WebAPI 2 OData 序列化器与 ODataMediaTypeFormatter

    我正在尝试使用 JSON NET 作为 WebAPI 2 堆栈中的默认序列化器 我已经实现了 JsonMediaTypeFormatter 其中使用 JSON NET 序列化器来序列化 反序列化数据 并创建了 JsonContentNego
  • Python Inspect.stack 很慢

    我只是在分析我的 Python 程序 看看为什么它看起来相当慢 我发现它的大部分运行时间都花在了inspect stack 方法 用于输出带有模块和行号的调试消息 每次调用 0 005 秒 这看起来相当高 是inspect stack真的这
  • 使用 django 表单保存新的外键

    我有两个模型 class Studio models Model name models CharField Studio max length 30 unique True class Film models Model studio m
  • 在易出错的初始化程序 swift 1.2 中分配 let 变量

    我有一个带有错误初始化程序的结构 不是实例方法 而是初始化程序 更新到 1 2 后 当我尝试分配let初始化程序内的属性 我收到以下错误Cannot assign to aspectRatio in self 我的代码如下 import F
  • 在Python中,如何解码GZIP编码?

    我在 python 脚本中下载了一个网页 在大多数情况下 这工作得很好 然而 这个有一个响应头 GZIP 编码 当我尝试打印这个网页的源代码时 它在我的腻子中包含了所有符号 如何将其解码为常规文本 我使用 zlib 从网络上解压缩 gzip
  • 滑动菜单将触摸事件锁定在上视图上

    我正在尝试使用滑动菜单在我的应用程序中 在我的 Sony Xperia S 上 它工作得非常好 但是当我尝试在 HTC Desire HD 上启动应用程序时 菜单可以通过手势完美打开 但其他触摸事件被阻止并且顶视图 ViewPager 滑动
  • JSON web-api 上公开的对象 - 如何阻止属性名称更改大小写?

    我有一个如下所示的对象模型 public class Product public string ProductCode get set public string ProductInfo get set 我通过 Dapper 填充它 并将
  • 在硬件加速下缩放画布时,偏移路径模糊

    我的应用程序使用可缩放的画布 以便我可以以米而不是像素为单位指定路径点 当我缩放画布时 然后使用画一条线path lineTo 打开硬件加速后 线条变得模糊且偏移 关闭硬件加速或使用硬件加速时不会发生这种情况canvas drawLine