© 2026 Hedgehog Software, LLC

TwitterGitHubDiscord
More
CommunitiesDocsAboutTermsPrivacy
Search
Star
Setup for Free
C#C
C#•2y ago•
4 replies
Angius

✅ SkiaSharp canvas scale not scaling

I have a method that takes an
int[,]
int[,]
array with ones and zeroes. Based on that, I want to create an image, that is optionally resized and blurred.
Creating the image at 1:1 scale works, blurring it works as well, but for the love of me I cannot get it to scale...
byte[] CreateImage(int[,] arr, float? scale = null, float? blur = null)
{
    var wSize = arr.GetLength(0);
    var hSize = arr.GetLength(1);
    
    var bmp = new SKBitmap(wSize, hSize);
    using (var canvas = new SKCanvas(bmp))
    {
        for (var w = 0; w < wSize; w++)
        {
            for (var h = 0; h < hSize; h++)
            {
                canvas.DrawPoint(w, h, arr[w, h] == 0 ? SKColors.White : SKColors.Black);
            }
        }

        if (scale is {} s)
        {
            canvas.Scale(s);
        }
    }

    if (blur is {} b)
    {
        var newBmp = new SKBitmap((int)(wSize * scale ?? 1), (int)(hSize * scale ?? 1));
        using var canvas = new SKCanvas(newBmp);
        using var paint = new SKPaint();
        
        paint.ImageFilter = SKImageFilter.CreateBlur(b, b);
        canvas.DrawImage(SKImage.FromBitmap(bmp), 0, 0, paint);
        
        using var blurredImage = SKImage.FromBitmap(newBmp);
        return blurredImage.Encode().ToArray();
    }

    using var image = SKImage.FromBitmap(bmp);
    return image.Encode().ToArray();
}
byte[] CreateImage(int[,] arr, float? scale = null, float? blur = null)
{
    var wSize = arr.GetLength(0);
    var hSize = arr.GetLength(1);
    
    var bmp = new SKBitmap(wSize, hSize);
    using (var canvas = new SKCanvas(bmp))
    {
        for (var w = 0; w < wSize; w++)
        {
            for (var h = 0; h < hSize; h++)
            {
                canvas.DrawPoint(w, h, arr[w, h] == 0 ? SKColors.White : SKColors.Black);
            }
        }

        if (scale is {} s)
        {
            canvas.Scale(s);
        }
    }

    if (blur is {} b)
    {
        var newBmp = new SKBitmap((int)(wSize * scale ?? 1), (int)(hSize * scale ?? 1));
        using var canvas = new SKCanvas(newBmp);
        using var paint = new SKPaint();
        
        paint.ImageFilter = SKImageFilter.CreateBlur(b, b);
        canvas.DrawImage(SKImage.FromBitmap(bmp), 0, 0, paint);
        
        using var blurredImage = SKImage.FromBitmap(newBmp);
        return blurredImage.Encode().ToArray();
    }

    using var image = SKImage.FromBitmap(bmp);
    return image.Encode().ToArray();
}
C# banner
C#Join
We are a programming server aimed at coders discussing everything related to C# (CSharp) and .NET.
61,871Members
Resources

Similar Threads

Was this page helpful?
Recent Announcements

Similar Threads

Install SkiaSharp
C#CC# / help
2y ago
✅ SkiaSharp apply gradient on the whole canvas except to one color
C#CC# / help
15mo ago
SkiaSharp, DX11 and DirectComposition
C#CC# / help
7mo ago
Optimising SkiaSharp blit/copy
C#CC# / help
3y ago