簡體   English   中英

AndroidSVG圖像上的模糊邊緣

[英]AndroidSVG fuzzy edges on image

我想在Android上顯示條形碼。 作為輸入,我得到SVG字符串。 作為SVG庫,我使用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渲染為位圖,並將位圖設置為ImageView。 如果該ImageView的大小大於位圖-即。 大於400 x 300,則該位圖中的抗鋸齒像素可能會變得更大,因此更可見。

一種解決方案是避免使用位圖。 改用Picture / PictureDrawable 這樣,無論大小如何,條形碼都將以最高質量呈現。 由於矢量圖形應該是。

請遵循此頁面上的示例:

http://bigbadaboom.github.io/androidsvg/use_with_ImageView.html

因此,您的代碼可能應該類似於以下內容:

private void loadQRCode(String svgString) {
    try {
        SVG svg = SVG.getFromString(svgString);

        barcode.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
        Drawable drawable = new PictureDrawable(svg.renderToPicture());
        barcode.setImageDrawable(drawable);

    } catch (SVGParseException e) {
        e.printStackTrace();
    }

}

如果出於某種原因需要使用位圖(也許正在緩存它們或其他東西),則應注意ImageView大小的變化,然后以新的大小重新創建位圖。 因此,位圖的大小始終與為其分配的ImageView相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM