「SkiaSharpでSKImageをファイルに保存する」の版間の差分
imported>Administrator ページの作成:「SkiaSharpでSKImageやSKBitmapをファイルに保存する。 <source lang="csharp"> SKBitmap bitmap = new SKBitmap(512, 512, isOpaque: false); SKCanvas canvas = new S...」 |
imported>Administrator |
||
| (同じ利用者による、間の2版が非表示) | |||
| 1行目: | 1行目: | ||
[[SkiaSharp]]でSKImageやSKBitmapをファイルに保存する。 | |||
<source lang="csharp"> | <source lang="csharp"> | ||
| 5行目: | 5行目: | ||
SKCanvas canvas = new SKCanvas(bitmap); | SKCanvas canvas = new SKCanvas(bitmap); | ||
canvas.Clear(SKColors.Blue); | canvas.Clear(SKColors.Blue); | ||
var image = SKImage.FromBitmap(bitmap); | var image = SKImage.FromBitmap(bitmap); | ||
| 16行目: | 17行目: | ||
== 備考 == | == 備考 == | ||
=== 利用できる保存フォーマット === | === 利用できる保存フォーマット === | ||
SKImage. | SKImage.Encodeメソッドに指定するSKEncodedImageFormat列挙体には色々なフォーマットが定義されているが、このうち実際に使えるのは「[[PNG]]」「[[JPEG]]」「[[WEBP]]」の三種類だけのようだ。 | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
| 63行目: | 64行目: | ||
=== PNGの圧縮レベル === | === PNGの圧縮レベル === | ||
本家[[Skia]]の方の[[ソースコード]]を見ると[[PNG]]については圧縮レベルは「3」の固定値であり現状では指定できない模様。これも新バージョンで変更になるかもしれないので逐次確認すること。 | |||
[[category: SkiaSharp]] | [[category: SkiaSharp]] | ||
2018年2月24日 (土) 02:46時点における最新版
SkiaSharpでSKImageやSKBitmapをファイルに保存する。
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);
}
備考[編集 | ソースを編集]
利用できる保存フォーマット[編集 | ソースを編集]
SKImage.Encodeメソッドに指定するSKEncodedImageFormat列挙体には色々なフォーマットが定義されているが、このうち実際に使えるのは「PNG」「JPEG」「WEBP」の三種類だけのようだ。
| フォーマット | 対応状況 |
|---|---|
| Bmp | NG |
| Gif | NG |
| Ico | NG |
| Jpeg | OK |
| Png | OK |
| Wbmp | NG |
| Webp | OK |
| Pkm | NG |
| Ktx | NG |
| Astc | NG |
| Dng | NG |
上記は以下のようなコードで試した。新バージョンで変更になっているかもしれないので逐次確認すること。
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");
}
}
PNGの圧縮レベル[編集 | ソースを編集]
本家Skiaの方のソースコードを見るとPNGについては圧縮レベルは「3」の固定値であり現状では指定できない模様。これも新バージョンで変更になるかもしれないので逐次確認すること。