public static bool TryGetPixelFormat(INTEROPFMT src, out SKIACOLOR dstColor, out SKIAALPHA dstAlpha, bool allowCompatibleFormats = false) { switch (src) { case INTEROPPIX.Alpha8.Code: dstColor = SKIACOLOR.Alpha8; dstAlpha = SKIAALPHA.Opaque; return(true); case INTEROPPIX.Luminance8.Code: dstColor = SKIACOLOR.Gray8; dstAlpha = SKIAALPHA.Opaque; return(true); case INTEROPPIX.BGR565.Code: dstColor = SKIACOLOR.Rgb565; dstAlpha = SKIAALPHA.Opaque; return(true); case INTEROPPIX.RGBA32.Code: dstColor = SKIACOLOR.Rgba8888; dstAlpha = SKIAALPHA.Unpremul; return(true); case INTEROPPIX.BGRA32.Code: dstColor = SKIACOLOR.Bgra8888; dstAlpha = SKIAALPHA.Unpremul; return(true); case INTEROPPIX.RGBA128F.Code: dstColor = SKIACOLOR.RgbaF32; dstAlpha = SKIAALPHA.Unpremul; return(true); } if (allowCompatibleFormats) { switch (src) { case INTEROPPIX.BGR24.Code: dstColor = SKIACOLOR.Rgb888x; dstAlpha = SKIAALPHA.Opaque; return(true); case INTEROPPIX.RGB24.Code: dstColor = SKIACOLOR.Rgb888x; dstAlpha = SKIAALPHA.Opaque; return(true); case INTEROPPIX.Luminance16.Code: dstColor = SKIACOLOR.Gray8; dstAlpha = SKIAALPHA.Opaque; return(true); } } dstColor = SKIACOLOR.Unknown; dstAlpha = SKIAALPHA.Unknown; return(false); }
public static bool ToImage(this SkiaSharp.SKPicture skPicture, Stream stream, SkiaSharp.SKColor background, SkiaSharp.SKEncodedImageFormat format, int quality, float scaleX, float scaleY, SkiaSharp.SKColorType skColorType, SkiaSharp.SKAlphaType skAlphaType, SkiaSharp.SKColorSpace skColorSpace) { using var skBitmap = skPicture.ToBitmap(background, scaleX, scaleY, skColorType, skAlphaType, skColorSpace); if (skBitmap is null) { return(false); } using var skImage = SkiaSharp.SKImage.FromBitmap(skBitmap); using var skData = skImage.Encode(format, quality); if (skData is { })
public static SkiaSharp.SKBitmap?ToBitmap(this SkiaSharp.SKPicture skPicture, SkiaSharp.SKColor background, float scaleX, float scaleY, SkiaSharp.SKColorType skColorType, SkiaSharp.SKAlphaType skAlphaType, SkiaSharp.SKColorSpace skColorSpace) { var width = skPicture.CullRect.Width * scaleX; var height = skPicture.CullRect.Height * scaleY; if (!(width > 0) || !(height > 0)) { return(null); } var skImageInfo = new SkiaSharp.SKImageInfo((int)width, (int)height, skColorType, skAlphaType, skColorSpace); var skBitmap = new SkiaSharp.SKBitmap(skImageInfo); using var skCanvas = new SkiaSharp.SKCanvas(skBitmap); Draw(skPicture, background, scaleX, scaleY, skCanvas); return(skBitmap); }