Ich möchte Barcode auf Android anzeigen. Als Eingabe bekomme ich SVG-String. Als SVG-Bibliothek verwende ich AndroidSVG. Ich habe Beispielcode von der Bibliothekswebsite verwendet und alles scheint in Ordnung zu sein. Aber wenn ich auf das Bild zoome, bekomme ich verzerrte Kanten (Anti-Alias?). Ich habe versucht, alle Flaggen zu deaktivieren. Aber das Bild hat immer noch unscharfe Kanten. Was kann mit meinem Code falsch sein?AndroidSVG fuzzy Kanten auf Bild
Bild: Versuchen Sie, auf max zu zoomen, Sie werden die unscharfen Kanten sehen.
Code:
private void loadQRCode(String svgString) {
SVG svg = null;
try {
svg = SVG.getFromString(svgString);
} catch (SVGParseException e) {
e.printStackTrace();
}
if (svg.getDocumentWidth() != -1) {
int widthPx = Utils.pxFromDp(400);
int heightDp = Utils.pxFromDp(300);
svg.setDocumentWidth(widthPx);
svg.setDocumentHeight(heightDp);
int width = (int) Math.ceil(svg.getDocumentWidth());
int height = (int) Math.ceil(svg.getDocumentHeight());
Bitmap newBM = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas bmcanvas = new Canvas(newBM);
final DrawFilter filter = new PaintFlagsDrawFilter(Paint.ANTI_ALIAS_FLAG| Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG, 0);
bmcanvas.setDrawFilter(filter);
barcode.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
bmcanvas.drawRGB(255, 255, 255);
svg.renderToCanvas(bmcanvas);
barcode.setImageBitmap(newBM);
}
}
Die SVG wird in Bitmap konvertiert, um angezeigt zu werden, Sie müssen die Auflösung erhöhen, damit die Schärfe beim Skalieren erhalten bleibt. – Duopixel