Сериализация растрового изображения в base64? - PullRequest
2 голосов
/ 01 марта 2011

Я играл с API Resco для Windows Mobile 6: http://www.resco.net/, и одна вещь, которую они делают, - это сериализация растровых изображений и их кодирование base64 в файле .resx, например, так:

<data name="buttonCell2.ImagePressed" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
      iVBORw0KGgoAAAANSUhEUgAAAEMAAAAaCAMAAADblRF+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
      YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAYZQTFRFtgAA////
      wAAAygAA2wAA2AAA0gAAuQAAvQAAsQAAwwAAzgAAxgAA1QAA3wAA4gAAswAArgAA5QAA5wAArAAA6gAA
      nQAA2QAAgAAA/wD/5AAApwAAxwAAugAA4AAAoQAAlQAAqgAAqAAAmgAAwgAAsAAAzQAA6AAA1wAA3gAA
      dQAAfAAAogAAvgAAsgAA/fTprQAAzwAAqwAAfwAAzAAAxAAAkQAAxQAAtAAAtQAA9M6Rz4SEsSoq+PDw
      agAAggAApAAAtDAw//36ZgAAewAAyX5+67uCbgAAdAAAyQkJjAAA+uO8qQYGoRsXtCwqeAAAYwAA1pld
      fCQWZQcEkwAA2qlqtWU/dRgP/fXmnCcnqGU/+d24mwAApQAAqicnjgAA/Pn5/fTneCQVigAA4qtxhx0b
      bAAA/fLkgCYY//38rB4edAcEp2E6owAAjx8UlwAA/ffucgAAcwAA0X94dgAAuXp2cAAAhQAAZQAAngAA
      aAAAnwAAxzAwgiQejQAA6s/PrGpDfx8Ulyx+wgAAASBJREFUOE+l1dVWw1AUBNBzkhYIUigUuUnapO7u
      WHF3d3d31z8nXYsvuGe/zzzOAGNs7fchnG7jkL5aMuIM2OJyWFck4CIpkwfljrlSj5AMtHIJJIWpdgY/
      05G8SfY3c/HLpvw9g5Ntu1lu4iabP8bh/F21yI3cZMfoCowoGUc9gSPTByGnL2ghCPoQQopoIhER7jZV
      M4mKcHuZrSPJIjxpngoSD8Lwa7SGJIpw5LaLJHaE7muoJQGEN71QTVJA6F+QBBIJ4SVnrSKxIsx8OStJ
      nAjz+0qRa8P+Q8UJhL1nLdZAEOs9hYsBd8IrcfMmOo6BfY5FbFZuts4dY5NnD3OaK2XjknKdfe8aHWzo
      cVXfaOGyNdh1U/4Gw3ocOcXL8T+dxW1D92ffagAAAABJRU5ErkJggg==
    </value>
  </data>

И он загружается примерно так:

this.buttonCell1.ImagePressed = ((System.Drawing.Image)(resources.GetObject("buttonCell1.ImagePressed")));

Когда я декодирую значение на базе 64, я получаю .bin, который я могу загрузить в краску, и он выглядит как изображение кнопки.

Мой вопрос: как сериализовать растровое изображение (или любое другое изображение) в текст, а затем закодировать с помощью base64, чтобы я мог добавить его в файл resx в проекте Windows Mobile.

Ответы [ 2 ]

2 голосов
/ 08 марта 2011

Вы могли бы сделать что-то вроде этого. Замените первую строку на более правильную:)

var myImage = new Bitmap(50,50);
var ms = new MemoryStream();
myImage.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] data = new byte[ms.Length];
ms.Read(data, 0, data.Length);

var base64ConvertedString = Convert.ToBase64String(data);
0 голосов
/ 04 мая 2011
public BitmapImage Base64ToImage(string base64String)
    {
        byte[] imageBytes = Convert.FromBase64String(base64String);
        MemoryStream ms = new MemoryStream(imageBytes, 0,imageBytes.Length);
        BitmapImage image2 = new BitmapImage();
        image2.SetSource(ms);
        ms.Close();
        return image2;
    }

вызовите функцию вот так,

        BitmapImage test = new BitmapImage();
        test = Base64ToImage(split[3].ToString());
        ImageBrush berriesBrush = new ImageBrush();
        berriesBrush.ImageSource = test;
        button1.Backgroud=berriesBrush;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...