Skip to content

Commit a0daba0

Browse files
committed
fix codec
1 parent 34ea07b commit a0daba0

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

src/Morph.Skia/Rendering/PageRenderer.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,17 @@ sealed class PageRenderer(RenderContext context) :
66
{
77
static readonly SKTypeface aptosTypeface = SKTypeface.FromFamilyName("Aptos", SKFontStyle.Normal);
88

9+
/// <summary>
10+
/// Safely decodes image data, returning null for unsupported formats
11+
/// instead of throwing when <see cref="SKCodec"/> cannot handle the data.
12+
/// </summary>
13+
static SKBitmap? DecodeBitmap(byte[] data)
14+
{
15+
using var skData = SKData.CreateCopy(data);
16+
using var codec = SKCodec.Create(skData);
17+
return codec != null ? SKBitmap.Decode(codec) : null;
18+
}
19+
920

1021
readonly TextRenderer textRenderer = new(context);
1122

@@ -496,7 +507,7 @@ void RenderImage(ImageElement image)
496507
else
497508
{
498509
// Regular bitmap image
499-
using var skImage = SKBitmap.Decode(image.ImageData);
510+
using var skImage = DecodeBitmap(image.ImageData);
500511
if (skImage != null)
501512
{
502513
currentCanvas.DrawBitmap(skImage, destRect);
@@ -1662,7 +1673,7 @@ void RenderImageInCell(ImageElement image, float x, float maxWidth)
16621673
}
16631674
else
16641675
{
1665-
using var skImage = SKBitmap.Decode(image.ImageData);
1676+
using var skImage = DecodeBitmap(image.ImageData);
16661677
if (skImage != null)
16671678
{
16681679
currentCanvas.DrawBitmap(skImage, destRect);
@@ -2440,7 +2451,7 @@ void RenderBackgroundShape(FloatingShapeElement shape)
24402451
// Check for image fill first
24412452
if (shape.ImageData != null)
24422453
{
2443-
using var bitmap = SKBitmap.Decode(shape.ImageData);
2454+
using var bitmap = DecodeBitmap(shape.ImageData);
24442455
if (bitmap != null)
24452456
{
24462457
var destRect = new SKRect(pixelX, pixelY, pixelX + pixelWidth, pixelY + pixelHeight);
@@ -2520,7 +2531,7 @@ void RenderFloatingImage(FloatingImageElement image)
25202531
}
25212532
else
25222533
{
2523-
using var skImage = SKBitmap.Decode(image.ImageData);
2534+
using var skImage = DecodeBitmap(image.ImageData);
25242535
if (skImage != null)
25252536
{
25262537
currentCanvas.DrawBitmap(skImage, destRect);

src/Morph.Skia/Rendering/TextRenderer.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -857,10 +857,15 @@ void RenderInlineImage(SKCanvas canvas, TextFragment fragment, float x, float y)
857857
else
858858
{
859859
// Render bitmap image
860-
using var skImage = SKBitmap.Decode(fragment.InlineImageData);
861-
if (skImage != null)
860+
using var skData = SKData.CreateCopy(fragment.InlineImageData);
861+
using var codec = SKCodec.Create(skData);
862+
if (codec != null)
862863
{
863-
canvas.DrawBitmap(skImage, destRect);
864+
using var skImage = SKBitmap.Decode(codec);
865+
if (skImage != null)
866+
{
867+
canvas.DrawBitmap(skImage, destRect);
868+
}
864869
}
865870
}
866871
}

0 commit comments

Comments
 (0)