差分

ナビゲーションに移動 検索に移動

SkiaSharpでSKImageをファイルに保存する

1,745 バイト追加, 2017年11月15日 (水) 08:35
ページの作成:「SkiaSharpでSKImageやSKBitmapをファイルに保存する。 <source lang="csharp"> SKBitmap bitmap = new SKBitmap(512, 512, isOpaque: false); SKCanvas canvas = new S...」
SkiaSharpでSKImageやSKBitmapをファイルに保存する。

<source lang="csharp">
SKBitmap bitmap = new SKBitmap(512, 512, isOpaque: false);
SKCanvas canvas = new SKCanvas(bitmap);
canvas.Clear(SKColors.Blue);
var image = SKImage.FromBitmap(bitmap);

using (var stream = File.Create("/tmp/test.png"))
{
var data = image.Encode(SKEncodedImageFormat.Png,100);
data.SaveTo(stream);
}
</source>

== 備考 ==
=== 利用できる保存フォーマット ===
SKImage.Encodeメソッドに指定するSKEncodedImageFormat列挙体には色々なフォーマットが定義されているが実際に使えるのは「PNG」「JPEG」「WEBP」の三種類だけのようだ。
{| class="wikitable"
|-
! フォーマット || 対応状況
|-
| Bmp || NG
|-
| Gif || NG
|-
| Ico || NG
|-
| Jpeg || OK
|-
| Png || OK
|-
| Wbmp || NG
|-
| Webp || OK
|-
| Pkm || NG
|-
| Ktx || NG
|-
| Astc || NG
|-
| Dng || NG
|}

上記は以下のようなコードで試した。新バージョンで変更になっているかもしれないので逐次確認すること。
<source lang="csharp">
SKImage image = SKImage.FromBitmap(bitmap);

foreach (SKEncodedImageFormat format in Enum.GetValues(typeof(SKEncodedImageFormat)))
{
var data = image.Encode(format, 100);
if (data == null)
{
Console.WriteLine(format.ToString() + ": NG");
}
else
{
Console.WriteLine(format.ToString() + ": OK");
}
}
</source>

=== PNGの圧縮レベル ===
本家Skiaの方のソースコードを見るとPNGについては圧縮レベルは「3」の固定値であり現状では指定できない模様。これも新バージョンで変更になるかもしれないので逐次確認すること。

[[category: SkiaSharp]]
匿名利用者

案内メニュー