Created
November 18, 2021 04:19
-
-
Save safern/364bc27301575cc39daa9ea1bf4df285 to your computer and use it in GitHub Desktop.
RoundImageDrawing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// See https://aka.ms/new-console-template for more information | |
using System; | |
using System.Drawing; | |
using System.Drawing.Drawing2D; | |
using System.Drawing.Imaging; | |
using System.IO; | |
using System.Linq; | |
using System.Runtime.InteropServices; | |
string imageBase64 = "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAScSURBVGhD1Zp7qBVVFIdvZdlbK7ESisogzUiTBKm/CsRCMqMgkswHSmGBGoKSIj6QyvSPSHpgQglikYFGYhQFGYpEopgFPlJE1MjsaWkv7fvGWXQ4zpw7l+7xbH/wcc5es+fMntl7r73WntOWkLrkn2ecLoOLT37Nvm+Gb+BuDWeKHoffYT8Mhk/gRM7fMA3OgqQ1C6LRcjz/PAAL4K+8/A5cAElqEthIn/pEWJGX5TlQQ+AwaPsMukNSuhf+AXtgtAbk8HkWam9G202wL7dtgSshCV0L8ZSna6jTBIgh9RacD9fBrty2DS6FlmsV2KB3oWwS22O/gPUcUlfAnXlZ7oKW6lawIT9CTw0NdBvoyay/Hb7Kv78HZ0NL9SjYmGPwgIZ2dA1sBc+Rr+ESaLnOgTfBRumtxkB76gYfgecchbHQcjknXoF4wnqtqdCefAB6sTjvNTgPWqZozBF4FWIBnAdVpKu2VzznCxgIp11OdNcOXWt4HYdJuNpFUCUUGQR7wXMcnvaOc+m0yR7w4suy0n8aAX+Cx17UUEGuIy+DD8bzdB7+votnU+V4jkXwdg11egR8uh6fraGibgHXpbghP52DTdP94IW+zErFGgcxZ6Zo6ID6QMRqP2lolj6EKg3Ug1lPHHIdkb/teUYMTZFDySf9M7gmlMmJbiPiRqx/M1SRc+Zb8LzhGpqhj8ELzM9K5YrcxPDlg/y7gWKVADHWpk+zUhP0MHiB76BRbziMnKhO+HvAxu8Az10KjfQkWO8PMD7rdJk3HAIv0igU6QcR6dau8v3BFFh7WbTrMIp16CkNnS1DirXgBdZoKFEP2AnWq19f1AzwmDlI/c7KeIibeElDM/QCeAFz76s1FMiEaQNYb2Nerpe23WAdNynURbAYtOlE5kKViKDDehq8gGP2Dg0F8sJmfzZmD1wFZXoQrOc8ewIiPPH3I03uVNm458GLOHEbhdvGVdbTQ1VxsbVbRLIJiiKE/y031SKFNW4aCWV6BqxnfFQ1ZdUh2BPrwF5wDna6jEYdHjZO7zMMyuQ4d9jpZh0yyWgUhIs0DfXJlcl9LIecN+JOSRI6FwyjvQF5Ay6EIln3dbCePeGETUKXg2PVhjkfXFnL5DoRAeNv0LQ4qKPSTbrbZ8N0h40ma+3c+R7cl0pCPl3ngQ1zy783FEk37HyIrE9XeQMkIfeSTPZtmOFC2eaagWG4YXEF7gpJyCe8EqInekGR3FyIuOlXMH1NSm402zgTHVPKItloJ7P1HH59ISkNBV2mvt+8u0jeqMe9CeOneIWWjGq3/+doKJA7Hh73RnxFlqQi3Xwfina/IzOzx9ycTlIGZjbSHikKsV0jDKOt4zZOkjJFjSH1mIY66cU+B4/rXpNVxFCmqkW6Dzx+EJKb2KEbwRXZXLjMha4Gb2RmVkpUsT+0JCudKnPoWC/K1pQk5GaBjRyQlU6V+0Ye951e0nKnzobaM07qej0EHjdkSVq+AYqh8zbUu97J4LGFWSlx+beJH8AGe1O+vNQN+0+dyC+SSVXb0/WwHOIFSi1upiUTmleVyZPDyWG2HlxjTHUTVlvbv5q1Vzw5UMvpAAAAAElFTkSuQmCC"; | |
if (args.Length != 1) | |
{ | |
Console.WriteLine("Specify 1 to generate image, specify 2 to compare inputs as an argument."); | |
return; | |
} | |
bool result = int.TryParse(args[0], out int value); | |
if (!result) | |
{ | |
return; | |
} | |
if (value == 1) | |
{ | |
string filePath = RuntimeInformation.FrameworkDescription.StartsWith(".NET Core", StringComparison.OrdinalIgnoreCase) ? | |
@"C:\repos\tmp\netcoreapp31.txt" : @"C:\repos\tmp\netfx.txt"; | |
RoundImageAndWriteBytes(imageBase64, filePath); | |
} | |
else if(value == 2) | |
{ | |
CompareInputs(); | |
} | |
void RoundImageAndWriteBytes(string base64Image, string filePath) | |
{ | |
var bytes = Convert.FromBase64String(imageBase64); | |
using MemoryStream ms = new MemoryStream(bytes); | |
using var graphicsPath = new GraphicsPath(); | |
var image = Image.FromStream(ms); | |
var dim = Math.Min(image.Width, image.Height); | |
var bmp = new Bitmap(dim, dim); | |
graphicsPath.AddEllipse(0, 0, dim, dim); | |
using (var graphics = Graphics.FromImage(bmp)) | |
{ | |
graphics.SmoothingMode = SmoothingMode.AntiAlias; | |
graphics.FillRectangle(Brushes.Magenta, 0, 0, dim, dim); | |
graphics.SetClip(graphicsPath); | |
graphics.DrawImage(image, Point.Empty); | |
} | |
bmp.MakeTransparent(Color.Magenta); | |
using MemoryStream dest = new MemoryStream(); | |
bmp.Save(dest, ImageFormat.Png); | |
bmp.Save(@"C:\repos\tmp\out.png"); | |
ms.Seek(0, SeekOrigin.Begin); | |
var finalArray = ms.ToArray(); | |
var finalStr = string.Join(",", finalArray); | |
File.WriteAllText(filePath, finalStr); | |
} | |
void CompareInputs() | |
{ | |
string netfxText = File.ReadAllText(@"C:\repos\tmp\netfx.txt"); | |
string netcoreappText = File.ReadAllText(@"C:\repos\tmp\netcoreapp31.txt"); | |
byte[] netfxBytes = netfxText.Split(',').Select(s => Byte.Parse(s)).ToArray(); | |
byte[] netcoreappBytes = netcoreappText.Split(',').Select(s => Byte.Parse(s)).ToArray(); | |
Console.WriteLine($"Length -- netfx {netfxBytes.Length}, netcoreapp {netcoreappBytes.Length}"); | |
if (netfxBytes.Length != netcoreappBytes.Length) | |
{ | |
return; | |
} | |
bool different = false; | |
for (int i = 0; i < netfxBytes.Length; i++) | |
{ | |
byte netfxByte = netfxBytes[i]; | |
byte netcoreappByte = netcoreappBytes[i]; | |
if (netfxByte != netcoreappByte) | |
{ | |
different = true; | |
Console.WriteLine($"Byte changed at index: {i} -- netfx {netfxByte}, netcoreapp {netcoreappByte}"); | |
} | |
} | |
if (!different) | |
{ | |
Console.WriteLine("No differences were found"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment