Я работаю над программой, которая преобразует штрихи inkcanvas в массив байтов для шифрования, а затем сохраняет его в txt-файле. По сути, мне нужно преобразовать массив байтов в штрихи inkcanvas. У меня первая половина кода сделал (который преобразует InkCanvas инсульты в массив байтов):Преобразование чернил InkCanvas в массив байтов и обратно
private byte[] InkCanvasToByte()
{
using (MemoryStream ms = new MemoryStream())
{
if(myInkCanvas.Strokes.Count > 0)
{
myInkCanvas.Strokes.Save(ms, true);
byte[] unencryptedSignature = ms.ToArray();
return unencryptedSignature;
}
else
{
return null;
}
}
}
Но мне нужна помощь в написании способ преобразовать массив байтов в InkCanvas штрихами, чтобы конвертировать InkCanvas инсульты к jpg.
До сих пор я создал метод, который открывает файл байтового массива и записывает его в переменный массиве байт:
private void ReadByteArrayFromFile()
{
string Chosen_File = "";
Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog();
ofd.Filter = "All Files (*.*)|*.*";
ofd.FilterIndex = 1;
ofd.Multiselect = false;
bool? userClickedOK = ofd.ShowDialog();
if (userClickedOK == true)
{
Chosen_File = ofd.FileName;
}
byte[] bytesFromFile = File.ReadAllBytes(Chosen_File);
}
Теперь все, что нужно сделать, это преобразовать этот байтовый массив обратно в изображения, либо посредством чернил. Я обновлю это сообщение решением, если найду его!
EDIT: Хм. Я использую код из этой ссылки, и я получаю: «Входной поток не является допустимым двоичным форматом. Начальное содержимое (в байтах): 00-FB-03-03-06-48-11-45-35 -46-35-11-00-00-80-3F-1F ...»
код я использую:
private void ReadByteArrayFromFile(string Chosen_File)
{
byte[] bytesFromFile = File.ReadAllBytes(Chosen_File);
try
{
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream(bytesFromFile);
MyCustomStrokes customStrokes = bf.Deserialize(ms) as MyCustomStrokes;
for(int i = 0; i < customStrokes.StrokeCollection.Length; i++)
{
if(customStrokes.StrokeCollection[i] != null)
{
StylusPointCollection stylusCollection = new
StylusPointCollection(customStrokes.StrokeCollection[i]);
Stroke stroke = new Stroke(stylusCollection);
StrokeCollection strokes = new StrokeCollection();
strokes.Add(stroke);
this.MyInkPresenter.Strokes.Add(strokes);
}
}
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message);
}
}
private void DecryptByteArray(byte[] encryptedArray)
{
}
}
[Serializable]
public sealed class MyCustomStrokes
{
public MyCustomStrokes() { }
/// <SUMMARY>
/// The first index is for the stroke no.
/// The second index is for the keep the 2D point of the Stroke.
/// </SUMMARY>
public Point[][] StrokeCollection;
}
}
Попробуйте взглянуть на это: [Сохранение перестроения InkCanvas Strokes] (http://www.codeproject.com/Articles/16579/Saving-Rebuilding-InkCanvas-Strokes). Похоже, это может быть полезно. – Jashaszun
Jashaszun, спасибо! Я видел это и решил проверить его перед обедом. Я буду обновлять сообщение и отвечать на мой вопрос, если он работает. – gtnewhouse
Это не то, как работает WPF. Единственный способ получить растровое изображение - начать с WPF-отображаемого объекта (в данном случае холста, презентатора и т. Д.) И сделать это, например, 'RenderTargetBitmap'. Другими словами, вопрос «как сохранить/загрузить штрихи» полностью отделен от вопроса «как сделать штрихи в растровое изображение». Пожалуйста, выясните, с каким вопросом вам нужна помощь, и отредактируйте/опубликуйте вопрос, чтобы включить [хороший, _minimal_, _complete_ пример кода] (http://stackoverflow.com/help/mcve), который четко показывает, что вы пробовали, и с чем вы столкнулись. –