【问题标题】:WindowsForm - Load picturebox.image from a xmlWindows 窗体 - 从 xml 加载 picturebox.image
【发布时间】:2013-08-22 16:35:27
【问题描述】:

我在 PictureBox 控件中加载图像“字符串”时遇到问题。 我无法找到一种充电方式,也不知道是否可以这样做。 我尝试了以下代码,但没有成功:

第一

var s= "0x89504E470D0A1A0A0000000D49484452000000900000005B0802000000130B9B9 8000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000013B49444154785EEDD6410D00211443418470C4BF333C808977F8C9242B8094CE9675F7F10D4A600D3AABA3FE045CD8B01F8C0B736146B14C8030C2CA7E7977104618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB863DFFBF32F5C2C8C5B40000000049454E44AE426082";

picture.Image = Base64ToImage(s);

静态图片 Base64ToImage(string base64String)

{

     byte[] imageBytes = Convert.FromBase64String(base64String);
    MemoryStream ms = new MemoryStream(imageBytes);
   return Image.FromStream(ms, true);

}

谁能帮忙!?

【问题讨论】:

  • 该图像应该是什么文件格式?
  • 我看不出这与 XML 有什么关系。
  • 问题是我的程序将无法访问数据库,我将加载包含图像的 XML,XML 由另一个系统提供,该系统将图像信息从数据库复制到文档,最后我将有一个字符串“s”,其中包含以字节为单位的图像,并在图片框中加载。

标签: c# winforms picturebox


【解决方案1】:

如果解码正确,这似乎是一个 91*144 的红色矩形。

  1. 从字符串中删除 0x 和空格。

  2. convert string to byte[] - 我使用了在 StackOverFlow 上找到的转换器,CainKellye (How can I convert a hex string to a byte array?)

string s = "89504E470D0A1A0A0000000D49484452000000900000005B0802000000130B9B98000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000013B49444154785EEDD6410D00211443418470C4BF333C808977F8C9242B8094CE9675F7F10D4A600D3AABA3FE045CD8B01F8C0B736146B14C8030C2CA7E7977104618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB86114618616502841156F6CB863DFFBF32F5C2C8C5B40000000049454E44AE426082";

byte[] imageBytes = StringToByteArrayFastest(s);

MemoryStream ms = new MemoryStream(imageBytes);

Bitmap bmp = (Bitmap)Image.FromStream(ms);

pictureBox1.Image = bmp; 
  1. 结果是:

【讨论】:

    【解决方案2】:

    我不认为s 是一个基数为 64 的字符串,它看起来更像是十六进制 - 它前面甚至还有 0x 并且“数字”不高于 F。您绝对应该删除0x 在前面。要获取 base 64 字符串,您可以使用 this website 中的代码(我还没有测试过):

    public static string ConvertHexStringToBase64(string hexString)
    {
        if (hexString.Length % 2 > 0)
            throw new FormatException("Input string was not in a correct format.");
        if (Regex.Match(hexString, "[^a-fA-F0-9]").Success == true)
            throw new FormatException("Input string was not in a correct format.");
        byte[] buffer = new byte[hexString.Length / 2];
        int i=0;
        while (i < hexString.Length) {
            buffer[i / 2] = byte.Parse(hexString.Substring(i, 2), System.Globalization.NumberStyles.HexNumber);
            i += 2;
        }
    return Convert.ToBase64String(buffer);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 2011-11-13
      相关资源
      最近更新 更多