간단합니다. RichTextBox에 있는 텍스트와 이미지를 XML에 저장하고 다시 불러들이는 시라니로입니다. 주의사항!! 제가 지금 만든거는 순서대로 불러들이지 않습니다!! ㅠㅠ 지금 프로젝트 진행중이라 이거에만 매달릴 수 없어서 못하고있지만 꼭 시간나면 만들겠슴!! 방식만 참고하세요ㅠㅠ;; |
http://www.codeproject.com <-요 사이트 다들 아시죠? 여기서 에디터는 가져왔습니다. 버튼만 2개 추가했슴죠 -0-;;
byte[] photo = null; //Image 저장 변수
ArrayList bnt = new ArrayList(); //image 담는 ArrayList입니다. photo를 담는거지요. 이미지를 추가시켜줄때마다 ArrayList에 담아줍니다.
private void tsbtnInsertPicture_Click(object sender, EventArgs e)
{ using (OpenFileDialog dlg = new OpenFileDialog()) { dlg.Title = "Insert picture"; dlg.DefaultExt = "jpg"; dlg.Filter = "Bitmap Files|*.bmp|JPEG Files|*.jpg|GIF Files|*.gif|All files|*.*"; dlg.FilterIndex = 1; if (dlg.ShowDialog() == DialogResult.OK) { try { string strImagePath = dlg.FileName; Image img = Image.FromFile(strImagePath); Clipboard.SetDataObject(img); DataFormats.Format df; df = DataFormats.GetFormat(DataFormats.Bitmap); if (this.rtbDocument.CanPaste(df)) { this.rtbDocument.Paste(df); photo = GetPhoto(dlg.FileName); //photo에 담아두기 bnt.Add(photo); //ArrayList에 담기 } } catch { MessageBox.Show("Unable to insert image.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } } |
여기서도 등장하는 포토함수~ public static byte[] GetPhoto(string filepath) //이미지 저장 함수. { FileStream stream = new FileStream(filepath, FileMode.Open, FileAccess.Read); BinaryReader reader = new BinaryReader(stream); byte[] photo = reader.ReadBytes((int)stream.Length); reader.Close(); stream.Close(); return photo; } |
Xml저장하는 버튼 코드입니다. DataSet을 만들고 테이블을 추가후 Column과 Row을 생성 후 텍스트와 이미지를 저장해주는 겁니다. private void toolStripButton1_Click_1(object sender, EventArgs e) //XML 저장 { DataSet ds = new DataSet(); DataTable dt = new DataTable("myTable"); DataColumn dc = new DataColumn("Content", typeof(string)); //본문내용 dt.Columns.Add(dc); int imageCnt = bnt.Count; for (int i = 0; i < imageCnt; i++) { dc = new DataColumn("image" + i.ToString(), typeof(byte[])); //이미지 dt.Columns.Add(dc); } ds.Tables.Add(dt); DataRow dr = dt.NewRow(); dr["Content"] = rtbDocument.Text; //본문내용 for (int i = 0; i < imageCnt; i++) { dr[i+1] = bnt[i]; //이미지 } ds.Tables["myTable"].Rows.Add(dr); SaveFileDialog save = new SaveFileDialog(); save.Filter = "xml file (*.*)|*.*"; //파일 필터링 if (save.ShowDialog() == DialogResult.OK) { ds.WriteXml(save.FileName); //XML Write. } } |
xml을 로드 시켜주는 버튼 소스입니다. private void toolStripButton2_Click(object sender, EventArgs e) //XML 로드 { OpenFileDialog dlg = new OpenFileDialog(); dlg.DefaultExt = ".xml"; //기본 확장자 dlg.Filter = "Xml Files(.xml)|*.xml"; // 확장 파일 필터 dlg.ShowDialog(); DataSet ds = new DataSet(); try { ds.ReadXml(dlg.FileName); LoadXml(ds); // XML 읽어주기 함수 } catch { } } private void LoadXml(DataSet ds) // XML 읽어주기 함수 { byte[] myData = null; string str; MemoryStream mem; Bitmap bmp; foreach (DataTable table in ds.Tables) { foreach (DataRow row in table.Rows) { rtbDocument.Text = row[0] as string; for (int i = 0; i < table.Columns.Count; i++) } } } |
p.s 지금 피곤해서 빼먹은게 있으려나 -,,- 그리고,
'programming > C#' 카테고리의 다른 글
RichTextBox.CaretPosition, TextPointer 클래스 (0) | 2010.07.29 |
---|---|
CLR (소스 코드를 관리되는 모듈로 컴파일하기) - 2 (0) | 2010.05.28 |
CLR(소스 코드를 관리되는 모듈로 컴파일하기) -1 (0) | 2010.05.25 |
속성 (0) | 2010.03.24 |