2023年6月13日
Saving-Rebuilding InkCanvas Strokes
Saving-Rebuilding InkCanvas Strokes – CodeProject
UploadStrokes
void UploadStrokes(StrokeCollection strokes)
{
if (strokes.Count > 0)
{
MyCustomStrokes customStrokes = new MyCustomStrokes();
customStrokes.StrokeCollection = new Point[strokes.Count][];
for (int i = 0; i < strokes.Count; i++)
{
customStrokes.StrokeCollection[i] =
new Point[this.MyInkCanvas.Strokes[i].StylusPoints.Count];
for (int j = 0; j < strokes[i].StylusPoints.Count; j++)
{
customStrokes.StrokeCollection[i][j] = new Point();
customStrokes.StrokeCollection[i][j].X =
strokes[i].StylusPoints[j].X;
customStrokes.StrokeCollection[i][j].Y =
strokes[i].StylusPoints[j].Y;
}
}
//Serialize our "strokes"
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, customStrokes);
try
{
Signature.UploadImage(ConnectionString, ms.GetBuffer());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
public static void UploadImage(string connectionString, byte[] signatureBytes)
{
try
{
OracleConnection conn = new OracleConnection(connectionString);
conn.Open() ;
OracleCommand cmd = new OracleCommand("insert into " +
"tabel(Signature) values(:Signature)", conn);
cmd.Parameters.Add("Signature", OracleType.Blob) ;
cmd.Parameters["Signature"].Value = signatureBytes;
cmd.ExecuteNonQuery();
conn.Close();
}
catch(Exception ex)
{
throw ex;
}
}
BuildImage
void BuildImage()
{
try
{
//download the image
byte[] signature = Signature.DownloadImage(ConnectionString);
//deserialize it
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream(signature);
MyCustomStrokes customStrokes = bf.Deserialize(ms) as MyCustomStrokes;
//rebuilt it
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)
{
MessageBox.Show(ex.Message);
}
}
public static byte[] DownloadImage(string connectionString)
{
try
{
OracleConnection conn = new OracleConnection(connectionString);
conn.Open();
OracleCommand cmd = new OracleCommand("select signature" +
" from tabel order by id desc", conn);
byte[] barrImg = cmd.ExecuteScalar() as byte [];
conn.Close();
return barrImg;
}
catch(Exception ex)
{
throw ex;
}
}