• Daum블로그로 구독
  • HanRSS
  • Google
  • RSS
  • Bloglines

IT2012. 2. 12. 20:11

C# XML에 이미지 저장 및 가져오기(Base64 인코딩, 디코딩)


.NET, XML,base64, 인코딩, 디코딩, 이미지,저장,로딩,XML 저장, XML 수정 ,C#, C sharp, 프로그래밍, XML Save,Encode, Decode, XmlDocument Class

본 포스트에서는 C#을 사용하여 XML에 이미지를 저장하고 가져오는 방법을 소개하고자합니다.

알고리즘은 이미지를 바이너리형태로 로딩한 후 Base64로 인코딩(Encoding)을 하여 문자열 형태로 XML에 저장하며 반대로 가져올 경우는 Base64로 인코딩 된 문자열을 Base64로 디코딩(Decoding)하여 바이너리로 복원합니다. 

이미지가 아닌 일반 문자열의 경우는 Base64로 인코딩 하고 다시 디코딩만 하면 됩니다.

  1. System.Xml 네임스페이스를 참조하는지 않을 경우는 아래 네임스페이스를 추가합니다.
  1.  using System.Xml;
     using System.Drawing.Imaging;
     using System.IO; 

2. Base64 관련 메서드는 Convert 클래스의 ToBase64String(인코딩) 메서드와 FromBase64String(디코딩)를 사용합니다.
  1.  public static string ToBase64String(byte[] inArray)
     public static byte[] FromBase64String(string s)
    

3. XmlDocument 클래스의 SelectNodes 메서드를 사용해서 XML화일을 검색 합니다.
  1.  myXmlDocument.SelectNodes("//CATEGORY_LIST//CATEGORY_NAME")

4. 사용된 XML 화일 구조
  1. <category_list>
    <category_name>all4cs.tistory.com</category_name>
    <category_name>Notice</category_name>
    <category_name>Guest Book</category_name>
    <category_name>C Sharp(C#)</category_name>
    <category_name>Javascript</category_name>
    <category_name>Flash Game</category_name>
    <category_name>ORIGAMI</category_name>
    <category_name>IT/WEB</category_name>
    <category_name>Photos</category_name>
    </category_list> 
    

5. C# XML 다루기 소스 코드
       private void button1_Click(object sender, EventArgs e)
        {

            Bitmap bmp = new Bitmap(@"D:\My Documents\My Pictures\bb.bmp");
            string picString = "";

            using (MemoryStream m = new MemoryStream())
            {
                bmp.Save(m, ImageFormat.Png);
                picString = Convert.ToBase64String(m.ToArray());
                m.Close();
            }

            bmp.Dispose();

            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(Application.StartupPath + @"\crew_info.xml");

            XmlNode xnode = xDoc.SelectSingleNode("//Crew//Picture");
            xnode.InnerText = picString;

            byte[] byteArr = System.Text.Encoding.Unicode.GetBytes("홍길동");

            XmlNode xnode1 = xDoc.SelectSingleNode("//Crew//Name");
            string str = System.Convert.ToBase64String(byteArr);
            xnode1.InnerText = str;

            xDoc.Save(Application.StartupPath + @"\crew_info.xml");

        }

        private void button2_Click(object sender, EventArgs e)
        {
            string picString = "";

            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(Application.StartupPath + @"\crew_info.xml");

            XmlNode xnode = xDoc.SelectSingleNode("//Crew//Picture");
            picString = xnode.InnerText;

            byte[] bytes = Convert.FromBase64String(picString);

            Bitmap bmp2 = null;
            using (MemoryStream m = new MemoryStream(bytes))
            {
                Bitmap bmpTmp = new Bitmap(m);
                bmp2 = new Bitmap(bmpTmp);
                bmpTmp.Dispose();
                m.Close();
            }
            this.BackgroundImage = bmp2;

            xnode = xDoc.SelectSingleNode("//Crew//Name");
            byte[] byteArr = Convert.FromBase64String(xnode.InnerText);
            textBox1.Text = System.Text.Encoding.Unicode.GetString(byteArr);
        }
C# XML에 이미지 저장 및 가져오기(Base64 인코딩 디코딩)
http://all4cs.tistory.com - 두그미의 사는 이야기


Posted by 4Cs