Я хочу отобразить штрих-код на Android. В качестве ввода я получаю строку SVG. В качестве библиотеки SVG я использую AndroidSVG. Я использовал образец кода с веб-сайта библиотеки, и все выглядит нормально. Но когда я увеличиваю изображение, я получаю искаженные края (Anti-alias?). Я попытался отключить все флаги. Но изображение все еще имеет нечеткие края. Что может быть неправильным с моим кодом?Нечеткие края AndroidSVG на изображении
Изображение: Постарайтесь увеличить масштаб до максимума, вы увидите нечеткие края.
Код:
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);
}
}
SVG преобразуется в растровое изображение для отображения, вам необходимо увеличить разрешение, чтобы он сохранял резкость при масштабировании. – Duopixel