Дрожание / дротик и сглаживание

#flutter #dart #antialiasing

#колебание #дротик #сглаживание

Вопрос:

В настоящее время я программирую приложение для навигации внутри помещений на Flutter, и я совсем новичок в Flutter и Dart. Для этого я использую и хочу расширить библиотеку mapsforge_flutter, основанную на mapsforge для Android. С помощью mapsforge_flutter я могу загружать карты OpenStreetMap, которые затем отображаются на телефоне. Проблема в том, что линии на картах выглядят довольно неровными, вот так: введите описание изображения здесь

Сглаживание еще не реализовано в mapsforge_flutter, поэтому я подумал, что проблема может заключаться именно в этом. В оригинальной библиотеке 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 ), похоже, у меня не работает.

Заранее спасибо!

Ответ №1:

Известна проблема с рендерингом карты с mapsforge_flutter. На данный момент никаких известных обходных путей нет, вы можете отслеживать этот запрос на open GitHub issue для получения более подробной информации.