gpt4 book ai didi

android - 在硬件加速下缩放 Canvas 时模糊的偏移路径

转载 作者:太空宇宙 更新时间:2023-11-03 11:40:07 31 4
gpt4 key购买 nike

我的应用程序使用我缩放的 Canvas ,以便我可以以米而不是像素为单位指定路径点。当我缩放 Canvas ,然后使用 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() 之上):

Screenshot.png

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

我更喜欢使用带硬件加速的 Path,用于点和速度之间的圆形连接。如果我做错了什么来造成这个问题,请告诉我。谢谢

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

最佳答案

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

关于android - 在硬件加速下缩放 Canvas 时模糊的偏移路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16090607/

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