100分求解决办法?大家帮忙
我做一个简单的画线程序 因为特殊要求(网上阅卷)要把涂鸦保存下来 我把鼠标画线经过的点都保存在SQL数据库里面 画线中间停顿时在数据库里插入一个(-1,-1);因为这样鼠标经过的点是以一个单位保存在数据库里面的,数据量太大 我想简化一下 但是又要保证把数据恢复出来时尽量的和原来所画线尽量的相似 大家有什么好的算法吗
我的一部分程序是这样的
private void MsMove(object sender,System.Windows.Forms.MouseEventArgs e)
{
string str= "server=127.0.0.1;Integrated Security=SSPI;database=webdevelop ";
SqlConnection conn=new SqlConnection(str);
if(pen)
{
g.DrawLine(new Pen(Color.Red), oldX, oldY, e.X, e.Y);
oldX = e.X;
oldY = e.Y;
p = new Point(e.X,e.Y);
array.Add(p);
string sql= "INSERT INTO ZUOBIAO (XX,YY) VALUES ( "+p.X+ ", "+p.Y+ ") ";
SqlDataAdapter adapter=new SqlDataAdapter(sql,conn);
DataSet dataset=new DataSet();
adapter.Fill(dataset, "ZUOBIAO ");
}
private void MsDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(pen)
{
string str= "server=127.0.0.1;Integrated Security=SSPI;database=webdevelop ";
SqlConnection conn=new SqlConnection(str);
SqlDataAdapter adapter1=new SqlDataAdapter( "INSERT INTO ZUOBIAO (XX,YY) VALUES (-1,-1) ",conn);
DataSet dataset1 = new DataSet();
conn.Open();
adapter1.Fill(dataset1, "ZUOBIAO ");
conn.Close();
}
if(e.Button == MouseButtons.Left)
{
isMoving = true;
}
Drag = true;
oldX=e.X;
oldY=e.Y;
}
private void MsUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
Drag = false;
if(e.Button == MouseButtons.Left)
isMoving = false;
}
而且我想填加一个右键菜单,在画过的线上右击 可以把这段线删除
大家有什么好的办法吗??
都来帮帮我吧
[解决办法]
mark
楼上是个办法,而且不用每次Move都新建连接吧。。
[解决办法]
或许将痕迹保存为jpg文件会容易些,载入时同时载入试卷和背景透明的文件就可以显示试卷和痕迹了。
[解决办法]
你把涂鸦所生成的Image或者bmp保存下来就可以了!
[解决办法]
我写了一个程序,楼主可以参考下,然后按自己的喜好改一下就可以了(VS2005):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace drawImageApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private struct lineData
{
public Point startPoint;
public Point endPoint;
public lineData(Point start, Point end)
{
startPoint = start;
endPoint = end;
}
}
private List <lineData> list;
private Point lastPoint = Point.Empty;
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.list = new List <lineData> ();
//TODO:可以在这里从数据库中加载以前存储的数据以供显示
}
protected override void OnMouseDown(MouseEventArgs e)
{
lastPoint = new Point(e.X, e.Y);
base.OnMouseDown(e);
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point curPoint = new Point(e.X, e.Y);
this.setLinePoint(lastPoint, curPoint);
this.drawLines(this.ClientRectangle);
this.lastPoint = curPoint;
}
base.OnMouseMove(e);
}
private void setLinePoint(Point lastPoint, Point curPoint)
{
lineData data = new lineData(lastPoint, curPoint);
this.list.Add(data);
}
private void drawLines(Rectangle rect)
{
if (this.Visible && !this.IsDisposed)
{
BufferedGraphicsContext myContext = BufferedGraphicsManager.Current;
BufferedGraphics buffer = myContext.Allocate(this.CreateGraphics(), rect);
if (buffer.Graphics != null)
{
this.drawList(buffer.Graphics, this.ClientRectangle);
}
buffer.Render();
buffer.Dispose();
}
}
private void drawList(Graphics g, Rectangle rect)
{
g.Clear(this.BackColor);
foreach (lineData data in this.list)
{
if (rect.Contains(data.startPoint) || rect.Contains(data.endPoint))
{
g.DrawLine(SystemPens.ControlText, data.startPoint, data.endPoint);
}
}
}
private void saveList()
{
try
{
string str = "server=127.0.0.1;Integrated Security=SSPI;database=webdevelop ";
SqlConnection conn = new SqlConnection(str);
StringBuilder sql = new StringBuilder();
if (this.list.Count > 0)
{
foreach (lineData data in this.list)
{
sql.Append(string.Format( "INSERT INTO ZUOBIAO (XX,YY) VALUES ({0},{1}); INSERT INTO ZUOBIAO (XX,YY) VALUES ({2},{3}) ",
data.startPoint.X, data.startPoint.Y, data.endPoint.X, data.endPoint.Y));
}
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql.ToString();
int retValue = cmd.ExecuteNonQuery();
}
}
catch(Exception ex)
{
System.Console.WriteLine(ex.Message);
}
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
this.saveList();
}
}
}
[解决办法]
我处理数据库时没有用conn.Open();楼主要加上.
[解决办法]