簡體   English   中英

使用AndroidSVG和Universal Image Loader解碼SVG

[英]Decoding SVG with AndroidSVG and Universal Image Loader

我正在嘗試用uil顯示svgs。 我使用androidsvg( http://code.google.com/p/androidsvg/ )編寫了自己的imagedecoder,如下所示:

public class SVGImageDecoder implements ImageDecoder {

@Override
public Bitmap decode(ImageDecodingInfo imageDecodingInfo) throws IOException {
    Bitmap decodedBitmap = null;

    InputStream inputStream = getImageStream(imageDecodingInfo);
    SVG svg = null;
    try {
        svg = SVG.getFromInputStream(inputStream);
    } catch (SVGParseException e) {
        e.printStackTrace();
    }
    Picture picture = svg.renderToPicture();
    PictureDrawable pictureDrawable = new PictureDrawable(picture);
    decodedBitmap = Bitmap.createBitmap(pictureDrawable.getIntrinsicWidth(),
            pictureDrawable.getIntrinsicHeight(), Bitmap.Config.RGB_565);
    Canvas canvas = new Canvas(decodedBitmap);
    // Clear background to white
    canvas.drawRGB(255, 255, 255);
    svg.renderToCanvas(canvas);
    return decodedBitmap;
}

protected InputStream getImageStream(ImageDecodingInfo decodingInfo) throws IOException {
    return decodingInfo.getDownloader().getStream(decodingInfo.getImageUri(), decodingInfo.getExtraForDownloader());
}
}

顯示SVG,但是出現以下問題:

1.)顏色和圖片未渲染並顯示。2.)渲染時間太長,logcat顯示如下內容:

01-06 23:48:15.310  15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2048K, 10% free 26540K/29187K, paused 1ms+29ms
01-06 23:48:15.645  15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2046K, 10% free 26541K/29187K, paused 2ms+27ms
01-06 23:48:15.970  15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2047K, 10% free 26542K/29187K, paused 1ms+28ms
01-06 23:48:16.305  15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2049K, 10% free 26541K/29187K, paused 2ms+29ms
01-06 23:48:16.650  15505-15506/de.phcom.epaper2 D/dalvikvm﹕ GC_CONCURRENT freed 2051K, 10% free 26538K/29187K, paused 1ms+27ms

那么,如何改善性能並解決問題呢? 有沒有更好的方法將svg與uil集成在一起?

SVG基本上僅由<image>元素組成,該元素引用整個頁面的較大外部圖像。 這並不是真正以最佳方式使用SVG。

無論如何,您的問題的答案如下:

您的圖片未顯示的原因是AndroidSVG不知道在哪里找到它。 您必須創建SVGExternalFileResolver類的實現,然后使用registerExternalFileResolver()方法將其傳遞給SVG。

在SVGExternalFileResolver的實現中,您需要重寫resolveImage()方法。 當渲染器需要繪制圖像時,它將從SVG文件中傳入文件名(在本例中為“ page_0001_img68.png”),並且您必須加載和解碼PNG並傳回Bitmap對象。

暫無
暫無

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

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