开发者

Serializing a bitmap image to a base64?

I've been playing around with the resco API for windows mobile 6: http://www.resco.net/ and one thing they do is serialize bitmap images and base64 encode them in the .resx file, for example like this:

<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>

And it gets loaded up like so:

this.buttonCell1.ImagePressed = ((System.Drawing.Image)(resources.GetObject("but开发者_Go百科tonCell1.ImagePressed")));

When I base 64 decode the value I get a .bin which I can load in paint and it looks like the button image.

My quesiton is: how do I serialize a bitmap image (or any image really) into text and then base64 encode it so I can add it to the resx file in a Windows Mobile project.


You could do something like this. Substitute the first row for a more valid one :)

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);


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;
    }

call the function like this,

        BitmapImage test = new BitmapImage();
        test = Base64ToImage(split[3].ToString());
        ImageBrush berriesBrush = new ImageBrush();
        berriesBrush.ImageSource = test;
        button1.Backgroud=berriesBrush;
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜