2011-04-12 5 views
1

Microsoft.Ink 네임 스페이스의 잉크를 memorystream으로 변환하려고 했으므로 이미지로 변환하려고했지만 왜 memorystream에서 오류가 발생하는지 이해하지 못합니다. Convert에서 오류라고 느꼈습니다 .FromBase64String()memorystream 문제에 대한 잉크

그러나 이미지로 변환해야하는 다른 선택 사항을 모르겠습니다.

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 
using Microsoft.Ink; 

namespace testPaint 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     InkCollector ink; 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      ink = new InkCollector(pictureBox1); 
      ink.Enabled = true; 
      ink.AutoRedraw = true; 
     } 

     private void btnSave_Click(object sender, EventArgs e) 
     { 
      UTF8Encoding utf8 = new UTF8Encoding(); 
      ink.Enabled = false; 

      string strInk = Convert.ToBase64String(ink.Ink.Save(PersistenceFormat.Base64InkSerializedFormat, CompressionMode.Maximum)); 
      textBox1.Text = strInk; 
      ink.Enabled = true; 
     } 

     private void btnClr_Click(object sender, EventArgs e) 
     { 
      ink.Enabled = false; 
      ink.Ink = new Microsoft.Ink.Ink(); 
      ink.Enabled = true; 
      pictureBox1.Invalidate(); 
     } 

     private void btnExport_Click(object sender, EventArgs e) 
     { 
      byte[] byImage = Convert.FromBase64String(textBox1.Text); 
      MemoryStream ms = new MemoryStream(); 
      ms.Write(byImage, 0, byImage.Length); 
      Image img = Image.FromStream(ms); 
      img.Save("test.gif", System.Drawing.Imaging.ImageFormat.Gif); 
      ink.Enabled = true; 


     } 
    } 
} 

답변

1

문서는 매우 예비하지만 난 당신이 아마 잘못된 PersistenceFormat 태그를 사용하여 생각 : 당신이 출력 형식이지만으로 Base64로를 사용하는

여기

내 코드 나에게 도와주세요입니다 명확하게 PersistenceFormat.Gif을 원합니다.

그 외에도 문자열로의 변환은 실제로 의미가 없습니다. 잉크 데이터를 저장하려면 변수 byte[] 만 사용하면됩니다. 또한 MemoryStreamSystem.Graphics.Image을 통한 귀하의 우회도 의미가 없습니다.

// using System.IO; 

private byte[] inkData; 

private void btnSave_Click(object sender, EventArgs e) 
{ 
    inkData = ink.Ink.Save(PersistenceFormat.Gif, CompressionMode.Maximum); 
} 

private void btnExport_Click(object sender, EventArgs e) 
{ 
    // Data is already in GIF format, write directly to file! 
    using (var stream = new FileStream("filename", FileMode.Create, FileAccess.Write)) 
     stream.Write(inkData, 0, inkData.Length); 
} 
+0

내 영웅 감사합니다! – Corbee