Skip to content

Instantly share code, notes, and snippets.

@AlLiberali
Last active May 10, 2025 18:08
Show Gist options
  • Select an option

  • Save AlLiberali/adef442e61abef6a2d1b5aad5f7359ba to your computer and use it in GitHub Desktop.

Select an option

Save AlLiberali/adef442e61abef6a2d1b5aad5f7359ba to your computer and use it in GitHub Desktop.
Blend2NET Library logo
using AlLiberali.Blend2NET;
using static AlLiberali.Blend2NET.PInvoke;
using System;
using System.IO;
var base64 = @"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";
var bytes = Convert.FromBase64String(base64);
using Image img = new(480, 480, BLFormat.BL_FORMAT_PRGB32);
Context ctx = img.CreateContext().Build();
ctx.Clear();
using Colour dotnetColour = new(ColourCodes.MicrosoftNet);
ctx.FillRoundRectangle(new() { x = 195, y = 195, w = 270, h = 270, rx = 25, ry = 25 }, dotnetColour);
using Image dotnetLogo = new(new MemoryStream(bytes));
ctx.Blit(new BLPointI() { x = 220, y = 220 }, dotnetLogo);
ctx.CompositionOperator = BLCompOp.BL_COMP_OP_DIFFERENCE;
using RadialGradient g = new() { X0 = 180, Y0 = 180, X1 = 180, Y1 = 180, CentreRadius = 180, FocalRadius = 0 };
g.Add(0.0, 0xFF_FF_FF_FF);
g.Add(1.0, 0xFF_FF_6F_3F);
ctx.FillCircle(new() { cx = 180, cy = 180, r = 160 }, g);
ctx.Flush();
img.Save("Logo.png");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment