Десериализовать WindowsForms ImageList - PullRequest
0 голосов
/ 04 октября 2018

У меня есть несколько файлов resx, содержащих различные System.Windows.Forms.ImageList s.

Есть ли способ получить изображения из него через resx - я не хочу получать ссылку на список изображений из моего проектаcode.

До сих пор мне удалось десериализовать строку base64.

Я получаю sth.как это:

WSystem.Windows.Forms, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089&System.Windows.Forms.ImageListStreamer
Data    <MSFtIL
BM66(@ [...]

Так что я предполагаю, что это кодированный base64 объект типа System.Windows.Forms.ImageListStreamer.Этот класс, однако, запечатан, и я не могу вытащить изображения из этого рекс.

Так как VisualStudio удается извлечь из него изображения, то это должно быть любым способом.

Это образец resx.(Form1.resx) - вы можете создать свою собственную, добавив новую форму окна, а затем добавить список изображений только с одним изображением.

[...]
<data name="imageList1.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
    <value>
    AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
    LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
    ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA8
    CAAAAk1TRnQBSQFMAwEBAAEIAQABCAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
    AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
    AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
    AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
    AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ
    AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm
    AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz
    AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm
    AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm
    AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA
    ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm
    AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm
    ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm
    AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA
    AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ
    AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz
    AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/
    AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA
    AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM
    AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm
    ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ
    AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/
    ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM
    ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm
    AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM
    AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA
    AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA
    ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7
    Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/8EAAHwCbwB9DUAAQcB8wf0
    AQcB9DUAAQcB/waaAf8BvAH0NQABBwH/BpoB/wG8AfQ1AAEHAf8BGgKaAnUBUwH0AbwB9DUAAQcB/wOa
    AxoB9QG8AfQ1AAHyAf8BAAH/AfQBGgF1AVMBGgHyAf83AAEbAlMBdQEaARsBGgH/OAAB9QEbAf8BAAHz
    AXUBUwEbAf85AAH1AZoBUwGaAfUBdQIaAf82AAH0AVMBdQH0AQABmgFTAfMBUwH2NgAB/wEbAf8BAAHz
    AVMB8wEbAVMB/zkAAf8BUwGaAQABGgF1OgABmgF1Af8BAAKaOgAB/wH1AgABUwEaPQAB/wGaAfUxAAFC
    AU0BPgcAAT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/AQAB4AEDBgAB4AEDBgAB4AEDBgAB4AED
    BgAB4AEDBgAB4AEDBgAB5AEDBgAB+AEHBgAB+AGDBgAB/gcAAfwBIAYAAfwBQAYAAf8BiQYAAf8BiQYA
    Af8BmQYAAf8B8QYACw==
    </value>
 </data>
 [...]

Также я могу найти это внутри resx:

mimetype: application/x-microsoft.net.object.binary.base64
value   : The object must be serialized with 
        : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
        : and then encoded with base64 encoding.

Редактировать 1

К настоящему времени мне удалось получить объект ImageListStreamer.К сожалению, его ImageList собственность остается null

//File containing only the value of the imagelist
string source = @"C:\Users\fd\source\repos\Trials\WindowsFormsApp1\imagelistsource.txt";

BinaryFormatter formatter = new BinaryFormatter();

string base64 = File.ReadAllText(source);
byte[] bytes = Convert.FromBase64String(base64);

using (Stream stream = new MemoryStream(bytes))
{
   ImageListStreamer streamer = (ImageListStreamer)formatter.Deserialize(stream);
 }

1 Ответ

0 голосов
/ 04 октября 2018
//File containing only the value of the imagelist
string source = @"C:\Users\fd\source\repos\Trials\WindowsFormsApp1\imagelistsource.txt";

BinaryFormatter formatter = new BinaryFormatter();

string base64 = File.ReadAllText(source);
byte[] bytes = Convert.FromBase64String(base64);

using (Stream stream = new MemoryStream(bytes))
{
    ImageListStreamer streamer = (ImageListStreamer)formatter.Deserialize(stream);

    //streamer.ImageList is actually null BUT that does not matter at all.

    ImageList list = new ImageList();
    list.ImageStream = streamer;

    //list is now filled with all the images !
   foreach (Bitmap image in list.Images)
   {
       //Got my Bitmap YAY !             
   }

}
...