1 // 2 // Copyright (c) 2010-2021 Antmicro 3 // 4 // This file is licensed under the MIT License. 5 // Full license text is available in 'licenses/MIT.txt'. 6 // 7 8 using System; 9 using System.IO; 10 11 namespace Antmicro.Renode.UserInterface 12 { 13 public static class InlineImage 14 { Encode(MemoryStream image)15 public static string Encode(MemoryStream image) 16 { 17 var encodedImage = Convert.ToBase64String(image.GetBuffer()); 18 return GenerateControlSequence(encodedImage); 19 } 20 Encode(Stream image)21 public static string Encode(Stream image) 22 { 23 if(image is MemoryStream) 24 { 25 return Encode((MemoryStream)image); 26 } 27 using(var stream = new MemoryStream()) 28 { 29 image.CopyTo(stream); 30 return Encode(stream); 31 } 32 } 33 GenerateControlSequence(string encodedImage)34 private static string GenerateControlSequence(string encodedImage) 35 { 36 return $"{Escape}{OperatingSystemCommand}{InlineImageCode};File=inline=1:{encodedImage}{Bell}"; 37 } 38 39 private const int InlineImageCode = 1337; 40 private const char Escape = (char)0x1B; 41 private const char OperatingSystemCommand = ']'; 42 private const char Bell = (char)0x7; 43 } 44 } 45