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