質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

2890閲覧

Xamarin.formsでSVG画像を読み込みたい

crew8573

総合スコア33

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2017/09/07 13:40

###前提・実現したいこと
Xamarin.Formsでsvg画像を読み込みたいのですが良い方法はないでしょうか?
個人的に調べた結果、PCLでiOS,Android固有のSVG読み込みAPIへのdependencyServiceを定義し、
Forms上で定義したdependecyServiceにより固有のAPIを呼び出すようにすれば良いのではと考えています。

http://ticktack.hatenablog.jp/entry/2016/01/02/212230
そこで上記のページを参考に、NugetでNGraphicsをiosのプロジェクトに追加し、
Resourcesフォルダの中にtiger.scgを格納し、呼び出そうとしたのですがうまくいきません。

参考サイトでは、変数svgTigerの中にsvgのファイル情報を直接入れ込んでいますが、
実装上ファイル名から呼び出したいので私は以下のように定義しています。

string svgTiger = "Tiger.svg"
var reader = new StringReader(svgTiger);
var graphic = Graphic.LoadSvg(reader);

Graphic.LoadSvgのところでエラーが発生してしまっているのですが、
どのように定義すれば参考サイトのようにSVGファイルを呼び出せるでしょうか?

ちなみに、SkiaSharpというものがXamarinの公式APIとして出ているようなのですが、
一般的にはSkiaSharpを利用する人の方が多いのですかね?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PCL上のResourceファイルの読み込み処理が抜けているかと思います。
またNGraphicsではGraphicを取得するところまではPCL上でできるので
取得したGraphicをDependencyServiceに渡せば良いかと思います。

cs

1var src = "プロジェクト名.フォルダ名.Tiger.svg"; 2//ResourceのStreamを取得 3var stream = typeof(PCLの任意のクラス).GetTypeInfo().Assembly.GetManifestResourceStream(src); 4using(var sr = new StreamReader(stream)){ 5 var g = NGraphics.Graphic.LoadSvg(sr); 6}

SkiaSharpでもSVGは扱えるようですが、利用者の状況はすみませんが私はわかりません。

投稿2017/09/07 14:24

kamu

総合スコア208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

crew8573

2017/09/07 15:11

ご返信ありがとうございます。 PCL上で動作できることは知りませんでした。 上記の内容の処理を追加してみようと思います。 ただ、PCLでSVGが読めるなら、読み込んだSVGをImageSourceに確保し、確保したImageSourceを 各プラットフォームのカスタムレンダラーに渡せないかと思ったのですが、そのような処理はできませんか?
kamu

2017/09/07 17:47

ImageSourceはPCL上でファイルパスやURLやリソースのstreamなどを確保するだけで実際にそれを画像に展開するにはNative側で対応するHandlerが必要になりますので、残念ながらNGraphicsを直接ImageSourceにする方法はありません。 その辺をやってみているものを作ったのですが http://kamusoft.hatenablog.jp/entry/2017/08/25/193552 これはXamarin.Formsのプレリリースからの対応です。 NGraphicsの場合も実際に描画するところはNativeでの処理が必要になります。 NGraphicsを利用したNControlというのがあって、これを使う方が手っ取り早いかもしれません。 http://ticktack.hatenablog.jp/entry/2016/02/02/000243 あるいはこちらも内部でNGraphicsを利用しているものですが http://ytabuchi.hatenablog.com/entry/2017/03/24/170000 ものすごく丁寧に書かれているのでこれを使っても良いと思います。
crew8573

2017/09/08 12:05

本日試してみたところ、回答していただいたような内容で実装することができました! ありがとうございます。 その他のご紹介いただいた方法についても一通り目を通しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問