首页 > 解决方案 > 颤振/飞镖和抗锯齿

问题描述

我目前正在用 Flutter 编写一个室内导航应用程序,而且我对 Flutter 和 Dart 还很陌生。为此,我使用并希望扩展库 mapsforge_flutter,基于 mapsforge for Android。使用 mapsforge_flutter,我可以下载 OpenStreetMap 地图,然后在手机上呈现这些地图。问题在于,地图上的线条看起来像这样像素化: 在此处输入图像描述

在 mapsforge_flutter 中还没有实现 AntiAliasing,所以我认为问题可能出在那儿。在原始的 mapsforge 库中,地图看起来没有那么像素化。

AA 以这种方式在原始库中实现:

// in Parameters.java: 

     //If true will use anti-aliasing in rendering.
     public static boolean ANTI_ALIASING = true;

// in AndroidPaint.java:

     AndroidPaint() {
        paint = new android.graphics.Paint();
        this.paint.setAntiAlias(Parameters.ANTI_ALIASING);
        this.paint.setStrokeCap(getAndroidCap(Cap.ROUND));
        this.paint.setStrokeJoin(android.graphics.Paint.Join.ROUND);
        this.paint.setStyle(getAndroidStyle(Style.FILL));
     }

// in AwtCanvas.java:

     AwtCanvas(Graphics2D graphics2D) {
        this.graphics2D = graphics2D;
        setAntiAlias(Parameters.ANTI_ALIASING);
        createFilters();
     }

     public void setBitmap(Bitmap bitmap) {
        if (bitmap == null) {
           this.bufferedImage = null;
           this.graphics2D = null;
        } else {
           this.bufferedImage = AwtGraphicFactory.getBitmap(bitmap);
           this.graphics2D = this.bufferedImage.createGraphics();
           setAntiAlias(Parameters.ANTI_ALIASING);
           this.graphics2D.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
           this.graphics2D.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
       }
     }

在 mapsforge_flutter 中有两个类:Mapcanvas 和 Fluttercanvas,具有以下方法,必须实现:

// in Fluttercanvas.dart:

bool isAntiAlias() {
// TODO: implement isAntiAlias
return null;
}

@override
void setAntiAlias(bool aa) {
// TODO: implement setAntiAlias
}

// in Mapcanvas.dart:

bool isAntiAlias();

有谁知道如何在 Flutter/Dart 中实现这一点?文档中的方法(https://api.flutter.dev/flutter/dart-ui/Paint/isAntiAlias.html)似乎对我不起作用。

提前致谢!

标签: flutterdartantialiasing

解决方案


推荐阅读