Скачайте SVG и конвертируйте в Bitmap или Drawable

Мой API возвращает SVG, я хочу взять этот SVG и превратить его в растровое изображение, чтобы я мог использовать его в качестве булавки на моем фрагменте карт Google.

Я нашел https://github.com/japgolly/svg-android, который, как только я добавил Jar в свое приложение, я начал получать странные ошибки времени выполнения, связанные со шрифтами. Ясно, что он слишком устарел, чтобы быть полезным.

Я посмотрел на Glide, потому что некоторые люди думали, что он будет работать с SVG.

У меня даже нет типа данных для его чтения, и я действительно не могу преобразовать его в пригодный для использования формат.

Все, что я хочу сделать, это взять этот responseBody.byteStream() и превратить его в растровое изображение. Тем не менее, решение Java также должно существовать.

 public Observable<Bitmap> fetchBitmap(String url) {
    Observable<Bitmap> bitmapObservable = mGenericApiService.getBitmap(url)
        .map(responseBody -> {
          Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
          Bitmap bitmap = Bitmap.createBitmap(50, 50, conf);
          //******** CODE HERE?? ********
          return bitmap;
        }).doOnError(getUniversalErrorHandler(mContext, mEventBus));
    return bitmapObservable;
  }

person StarWind0    schedule 22.02.2018    source источник
comment
См. github.com/BigBadaboom/androidsvg, а также github.com/jiahuanyu/   -  person Manohar    schedule 22.02.2018


Ответы (1)


То, что вам не хватает, похоже на приведенное ниже (не проверено):

public Observable<Bitmap> fetchBitmap(String url) {
    Observable<Bitmap> bitmapObservable = mGenericApiService.getBitmap(url)
        .map(responseBody -> {
          Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
          Bitmap bitmap = Bitmap.createBitmap(50, 50, conf);

          // Get a Canvas for the Bitmap
          Canvas  canvas = new Canvas(bitmap);

          // Read the SVG file
          SVG svg = SVGParser.getSVGFromInputStream(inputstream);
          // There are other ways to read an SVG file. See the SVGParser class for the others.

          // Get a Picture from the SVG and render it to the Canvas
          canvas.drawPicture(SVG.getPicture());

          return bitmap;
        }).doOnError(getUniversalErrorHandler(mContext, mEventBus));
    return bitmapObservable;
}
person Paul LeBeau    schedule 22.02.2018