ToData now supports multiple formats.

Introduce `ProgrartC` to build a single image to work with other build tools.
Added a `CombinedStorageProvider` to allow aggregate storage providers.
This commit is contained in:
Creeper Lv
2026-01-16 00:36:38 +11:00
parent e4e868a393
commit dce1ff2518
9 changed files with 261 additions and 17 deletions

View File

@@ -20,10 +20,10 @@ namespace Progrart.Core
return Fonts[fontName];
else
{
var task=StorageProvider.TryOpenRead(fontName);
var task = StorageProvider.TryOpenRead(fontName);
task.Wait();
var stream=task.Result;
if(stream != null)
var stream = task.Result;
if (stream != null)
{
SKTypeface typeface = SKTypeface.FromStream(stream);
@@ -47,6 +47,44 @@ namespace Progrart.Core
{
return surface.Snapshot().Encode(SKEncodedImageFormat.Png, 100);
}
public SKData ToData(SKEncodedImageFormat format)
{
return surface.Snapshot().Encode(format, 100);
}
public SKData ToData(string extension)
{
SKEncodedImageFormat format = SKEncodedImageFormat.Png;
if (extension.StartsWith('.'))
extension = extension[1..];
switch (extension)
{
case "jpg":
case "jpeg":
format = SKEncodedImageFormat.Jpeg;
break;
case "bmp":
format = SKEncodedImageFormat.Bmp;
break;
case "webp":
format = SKEncodedImageFormat.Webp;
break;
case "ico":
format = SKEncodedImageFormat.Ico;
break;
case "heif":
format = SKEncodedImageFormat.Heif;
break;
case "avif":
format = SKEncodedImageFormat.Avif;
break;
case "jxl":
format = SKEncodedImageFormat.Jpegxl;
break;
default:
break;
}
return surface.Snapshot().Encode(format, 100);
}
public void Dispose()
{
if (isDisposed) return;