|
private void 사진넣기ToolStripMenuItem_Click(object sender, EventArgs e) { ofd_pic.Title = "사진 넣기"; ofd_pic.DefaultExt = "jpg"; ofd_pic.Filter = "JPEG Files|*.jpg"; ofd_pic.FilterIndex = 1; if (ofd_pic.ShowDialog() == DialogResult.OK) { try { string strImagePath = ofd_pic.FileName; Image img = Image.FromFile(strImagePath); // 선택한 이미지 파일을 불러온다. Clipboard.SetDataObject(img); // 불러온 이미지 파일을 클립보드에 저장한다.
DataFormats.Format df; df = DataFormats.GetFormat(DataFormats.Bitmap); // Bitmap파일의 포맷 형식을 받는다.
if (this.richTextBoxPrintCtrl1.CanPaste(df)) // 리치텍스트 박스 안에 그림파일의 포맷이 있으면 { this.richTextBoxPrintCtrl1.Paste(df); // 클립보드 안에 있는 내용을 포맷에 맞게 삽입한다.
FileStream fs = new FileStream(ofd_pic.FileName, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs);
byte[] pic = br.ReadBytes((int)fs.Length); // 이진화 시킨다. br.Close(); fs.Close();
bnt.Add(pic); // 그림 파일이 여러 개일 수도 있기 때문에 배열에 저장한다. } } catch {
} } } |
2) XML 저장
private void xML저장ToolStripMenuItem_Click(object sender, EventArgs e) { 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"] = richTextBoxPrintCtrl1.Text; // 본문 내용을 Content에 저장
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 (*.xml)|*.xml"; // XML 파일 형태로 저장
if (save.ShowDialog() == DialogResult.OK) { ds.WriteXml(string.Format(save.FileName+".xml")); // XML 저장 } } |
3) XML 로드
private void xML로드ToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "xml file (*.xml)|*.xml"; // XML 파일 읽기 위한 필터 dlg.ShowDialog();
DataSet ds = new DataSet();
try { ds.ReadXml(dlg.FileName); // XML 파일 읽기 LoadXml(ds); // 매개변수로 데이터 셋을 보내줌 } catch {
} }
private void LoadXml(DataSet ds) { byte[] myData = null; // 그림을 받기위한 변수 (이진화)
string str; MemoryStream mem; Bitmap bmp;
foreach (DataTable table in ds.Tables) { foreach (DataRow row in table.Rows) { richTextBoxPrintCtrl1.Text = row[0] as string; // 첫번째 행의 문자열을 보여준다.
for (int i = 0; i < table.Columns.Count; i++) { str = row["Image" + i.ToString()].ToString(); // 컬럼에 맞는 그림을 읽어온다. myData = Convert.FromBase64String(str); // byte[]를 컨버트 시켜줌 mem = new MemoryStream(myData); bmp = new Bitmap(mem); // byte[]를 그림파일로 변환
Clipboard.Clear(); // 클립보드안에 내용 있으면 지워주고 Clipboard.SetImage(bmp); // 클립보드에 그림을 저장한다.
richTextBoxPrintCtrl1.Paste(); // 클립보드에 있는 내용을 보여준다. } } } } |
3) 보완점
- XML로 변환을 해서 저장, 로드를 해 보았지만 폰트 색깔이나 크기를 변경하면 적용 되
지 않는다.
- 또한 글, 그림, 글 순으로 입력 해도 순서가 그림이 먼저 나오고 글이 뒷부분에 나온다.
- 글이나 그림 위치 지정할 수 있는 방법을 찾아봐야 겠고, 폰트 색깔과 크기를 저장 할
수 있어야 보완이 될거 같다.
- 제대로 저장 할 수 있는 방법을 찾아서 팀 프로젝트에 유용하게 적용 했으면 한다.
|