none
讀取.xml檔中的圖片資訊 RRS feed

  • 問題

  • FileStream fs = new FileStream(圖片路徑, FileMode.Open);
    BinaryReader br = new BinaryReader(fs);
    byte[] imagebuffer = new byte[br.BaseStream.Length];
    br.Read(imagebuffer, 0, Convert.ToInt32(br.BaseStream.Length));
    string PICstring = System.Convert.ToBase64String(imagebuffer);
    fs.Close();
    br.Close();

    要把圖片存進xml檔,看網上一些參考,經過轉換後存到.xml裡
    <image>

    PICstring

    </image>

    那如果我要讀取這個xml裡的這個圖片資訊,然後把它秀在picturebox該怎做呢?

    2013年11月18日 上午 02:41

解答

  • 您好,

    讀出來轉成image然後assign給picturebox的image屬性!

    XmlDocument xdoc = new XmlDocument();
    xdoc.Load(@"H:\t.xml");
    XmlNode firstImage = xdoc.SelectSingleNode(@"//image");
    if (firstImage != null)
    {
    	string base64String = firstImage.InnerText;
    	byte[] imageBytes = Convert.FromBase64String(base64String);
    	MemoryStream ms = new MemoryStream(imageBytes);
    	pictureBox1.Image = Image.FromStream(ms, true);
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 KikrW 2013年11月18日 上午 03:29
    2013年11月18日 上午 03:17
  • 您好,

    可以先取出PIC Node後再處理,例如您的XML內容如下,

    <?xml version="1.0" ?>
    <PICS>
    <PIC>
    <imageName>蒙娜麗莎</imageName>
    <image>圖片資訊</image>
    </PIC>
    <PIC>
    <imageName>畢卡索</imageName>
    <image>圖片資訊</image>
    </PIC>
    </PICS>

    處理的Code大約為,

    XmlDocument xdoc = new XmlDocument();
    xdoc.Load(@"H:\t.xml");
    XmlNodeList pics = xdoc.SelectNodes(@"//PIC");
    //取出所有的pic
    foreach(XmlNode node in pics)
    {
    	//取出imageName
    	string imageName = node["imageName"].InnerText;
    	string base64String = node["image"].InnerText;
    	byte[] imageBytes = Convert.FromBase64String(base64String);
    	MemoryStream ms = new MemoryStream(imageBytes);
    	//動態新增textbox & pictureBox
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 KikrW 2013年11月18日 上午 10:22
    2013年11月18日 上午 09:11

所有回覆

  • 您好,

    讀出來轉成image然後assign給picturebox的image屬性!

    XmlDocument xdoc = new XmlDocument();
    xdoc.Load(@"H:\t.xml");
    XmlNode firstImage = xdoc.SelectSingleNode(@"//image");
    if (firstImage != null)
    {
    	string base64String = firstImage.InnerText;
    	byte[] imageBytes = Convert.FromBase64String(base64String);
    	MemoryStream ms = new MemoryStream(imageBytes);
    	pictureBox1.Image = Image.FromStream(ms, true);
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 KikrW 2013年11月18日 上午 03:29
    2013年11月18日 上午 03:17
  • 您好 請問一下

    如果我有N個資料夾 每個資料夾裡有一個xml檔(記錄了使用者身高體重)

    我想每次讀取一個資料夾的xml後  動態新增一個panel 與textbox ,把使用者資料寫進textbox

    有比較簡單的方法嗎 

    2013年11月18日 上午 06:13
  • 您好,

    1.讀取Root目錄下的所有的目錄中的xml

    2.動態建立panel加到畫面上

    如果資料太多的話,要考慮以何種方式來呈現...


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年11月18日 上午 06:30
  • <PIC>
    
    <imageName> 蒙娜麗莎</imageName>
    
    <image>圖片資訊</image>
    
    </PIC>
    
    
    <PIC>
    
    <imageName> 畢卡索</imageName>
    
    <image>圖片資訊</image>
    
    </PIC>
    如果我的xml是像這樣 imageName跟image 要怎麼可以對起來呢
    • 已編輯 KikrW 2013年11月18日 上午 08:18
    2013年11月18日 上午 08:15
  • 您好,

    可以先取出PIC Node後再處理,例如您的XML內容如下,

    <?xml version="1.0" ?>
    <PICS>
    <PIC>
    <imageName>蒙娜麗莎</imageName>
    <image>圖片資訊</image>
    </PIC>
    <PIC>
    <imageName>畢卡索</imageName>
    <image>圖片資訊</image>
    </PIC>
    </PICS>

    處理的Code大約為,

    XmlDocument xdoc = new XmlDocument();
    xdoc.Load(@"H:\t.xml");
    XmlNodeList pics = xdoc.SelectNodes(@"//PIC");
    //取出所有的pic
    foreach(XmlNode node in pics)
    {
    	//取出imageName
    	string imageName = node["imageName"].InnerText;
    	string base64String = node["image"].InnerText;
    	byte[] imageBytes = Convert.FromBase64String(base64String);
    	MemoryStream ms = new MemoryStream(imageBytes);
    	//動態新增textbox & pictureBox
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 KikrW 2013年11月18日 上午 10:22
    2013年11月18日 上午 09:11
  • 另外,

    如果是要找到Form中的其中一個PictureBox,然後將更新它,就類似如下,

    //1.如果您的PictureBox Name是有Rule的,請先設定PictureBox的Name哦!
    string updatePictureBoxName = "pictureBox2";
    //2.如果您的PictureBox是放在某個容器之中,請更換this成那個容器物件
    PictureBox updPic = (from p in this.Controls.OfType<PictureBox>()
    					 where p.Name == updatePictureBoxName
    					select p).FirstOrDefault();
    if (updPic != null)
    {
    	//請裡去更新PictureBox的Image
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年11月21日 上午 09:44
  • XmlDocument xdoc = new XmlDocument();
    xdoc.Load(@"H:\t.xml");
    XmlNodeList pics = xdoc.SelectNodes(@"//PIC");
    //取出所有的pic
    

    請問這樣寫

    如果PIC裡面是空的 該怎麼判斷呢??

    2013年11月22日 上午 10:28
  • 您好,

    請使用 pics.Count 屬性來判斷是否為0。

    請參考msdn上的說明,

    http://msdn.microsoft.com/zh-tw/library/system.xml.xmlnodelist.count(v=vs.110).aspx


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2013年11月23日 上午 06:59