c#截图程序,画矩形的问题
用过截图的都知道截图的时候大背景是暗色的,而选中矩形部分是不暗的,鼠标移动事件里我用g.DrawImage(screenBmp,rect,rect,GraphicsUni...
用过截图的都知道截图的时候大背景是暗色的,而选中矩形部分是不暗的,鼠标移动事件里我用g.DrawImage(screenBmp, rect, rect, GraphicsUnit.Pixel);来不停的画矩形内的图案,会很卡,不是闪,敢问应该怎么办啊???
我说的卡的意思是矩形远远跟不上鼠标的移动速度
有耐心回答的可以看看我的代码,不多,才不到100行 展开
我说的卡的意思是矩形远远跟不上鼠标的移动速度
有耐心回答的可以看看我的代码,不多,才不到100行 展开
展开全部
我有兴趣看你的代码,请压缩发到675686066#qcom
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用系统;
使用System.Collections.Generic;
使用System.ComponentModel;
使用System.Data;
使用System.Drawing;
使用System.Text;
使用System.Windows.Forms的;
使用S10806Class;
使用System.IO;
命名空间的getImage
公共部分类GetScreenImgForm :表
{
/ / /公升; summarygt
/ / /图像处理类
/ / /
ImageWork imageWork =新ImageWork();
/ / /公升; summarygt
/ / /保存捕获桌面图像
/ / /
图片screenImg = NULL;
/ / /公升; summarygt
/ / /保存用户的图像区域
/ / / 矩形imgRect =新的Rectangle ();
/ / /公升; summarygt
/ / /表格的GDI
/ / /
图形克= NULL;
/ / /公升; summarygt
/ / /区域边界刷
/ / /
笔笔=新朋(Color.black的,1);
/ / /公升; summarygt
/ / /应借鉴区域
/ / /
布尔isDraw = FALSE;
/ / /公升; summarygt
/ / /是否在用户选定的区域
/ / /
布尔isOption = FALSE;
公共GetScreenImgForm()
的InitializeComponent();
/ /获取当前桌面截图
screenImg = imageWork。 GetScreenImage();
G = this.CreateGraphics();
}
私人无效GetScreenImgForm_Load(对象发件人,EventArgs的发送)
{ this.Size =新的大小(screenImg.Width,screenImg.Height);
this.BackgroundImage = screenImg;
}
私人无效GetScreenImgForm_MouseUp(对象发件人,MouseEventArgs的E)
{
/ /没有截图,然后右键单击 - !关闭视窗
如果(e.Button == MouseButtons.Right && this.isOption)
{
this.Close();
}
/ /截图和单击右 - 取消屏幕截图
否则,如果(e.Button == MouseButtons.Right && this.isOption)
{
g.DrawImage(screenImg,新点(0,0) );
this.isOption = FALSE;
回报;
} / /释放按钮,在屏幕截图的情况下,选择区域的结束,双击截取等待
否则,如果(e.Button == MouseButtons.Left && this.isOption && this.isDraw)
{
this.isDraw = FALSE;
imgRect.Width =前 - imgRect.X; / /区域长度
imgRect.Height = EY - imgRect.Y; / /区域高度
}
}
>
私人无效GetScreenImgForm_MouseDown(对象发件人,MouseEventArgs的E)
{
如果(e.Button = MouseButtons.Left!)返回;
如果(this.isOption )返回;
imgRect.X =的eX; / /开始X轴
imgRect.Y = EY; / /开始Y轴
> this.isDraw = TRUE ;/ /允许绘图
}
私人无效GetScreenImgForm_MouseMove(对象发件人,MouseEventArgs的E)
{
如果(isDraw)
> {
/ /刷新图像;
this.isOption = TRUE;
>点P1 =新的点(imgRect.X,imgRect.Y);
点P2 =新的点(EX,imgRect。 Y);
点P3 =新的点(imgRect.X,EY);
点P4 =新的点(EX,EY);
/ /画四条边框 g.DrawLine(钢笔,P1,P2);
g.DrawLine(钢笔,P2,P4);
g.DrawLine(钢笔,P4,P3);
克。的DrawLine(钢笔,P3,P1);
}
{
/ /判断用户选择的区域
诠释顶级= imgRect.Y;
整型下来= imgRect.Y + imgRect.Height;
整数左= imgRect.X;
整数右= imgRect.X + imgRect.Width;
/ /鼠标选择区域变得看看
如果(EX系列>左&&的eX 顶部&& EY <向下)
{
this.Cursor = Cursors.SizeAll; } {
this.Cursor = Cursors.Cross;
}
}
}
私人无效GetScreenImgForm_MouseDoubleClick(对象发件人, MouseEventArgs的E)
{
{
/ /用户双击所选区域尝试.....
如果(this.Cursor ==游标。 SizeAll)
{
位图B =新的位图(this.screenImg);。
位图IMG = b.Clone(this.imgRect,System.Drawing.Imaging PixelFormat.DontCare );
SaveFileDialog DLG =新SaveFileDialog();
dlg.Filter =“..(* JPG格式)| * JPG”;
如果(dlg.ShowDialog()= DialogResult.OK!)返回;
img.Save(dlg.FileName);
this.Close();
}
}
赶上(例外ERR)
{
的MessageBox.show(err.message中);
}
}
>}
}
使用System.Collections.Generic;
使用System.ComponentModel;
使用System.Data;
使用System.Drawing;
使用System.Text;
使用System.Windows.Forms的;
使用S10806Class;
使用System.IO;
命名空间的getImage
公共部分类GetScreenImgForm :表
{
/ / /公升; summarygt
/ / /图像处理类
/ / /
ImageWork imageWork =新ImageWork();
/ / /公升; summarygt
/ / /保存捕获桌面图像
/ / /
图片screenImg = NULL;
/ / /公升; summarygt
/ / /保存用户的图像区域
/ / / 矩形imgRect =新的Rectangle ();
/ / /公升; summarygt
/ / /表格的GDI
/ / /
图形克= NULL;
/ / /公升; summarygt
/ / /区域边界刷
/ / /
笔笔=新朋(Color.black的,1);
/ / /公升; summarygt
/ / /应借鉴区域
/ / /
布尔isDraw = FALSE;
/ / /公升; summarygt
/ / /是否在用户选定的区域
/ / /
布尔isOption = FALSE;
公共GetScreenImgForm()
的InitializeComponent();
/ /获取当前桌面截图
screenImg = imageWork。 GetScreenImage();
G = this.CreateGraphics();
}
私人无效GetScreenImgForm_Load(对象发件人,EventArgs的发送)
{ this.Size =新的大小(screenImg.Width,screenImg.Height);
this.BackgroundImage = screenImg;
}
私人无效GetScreenImgForm_MouseUp(对象发件人,MouseEventArgs的E)
{
/ /没有截图,然后右键单击 - !关闭视窗
如果(e.Button == MouseButtons.Right && this.isOption)
{
this.Close();
}
/ /截图和单击右 - 取消屏幕截图
否则,如果(e.Button == MouseButtons.Right && this.isOption)
{
g.DrawImage(screenImg,新点(0,0) );
this.isOption = FALSE;
回报;
} / /释放按钮,在屏幕截图的情况下,选择区域的结束,双击截取等待
否则,如果(e.Button == MouseButtons.Left && this.isOption && this.isDraw)
{
this.isDraw = FALSE;
imgRect.Width =前 - imgRect.X; / /区域长度
imgRect.Height = EY - imgRect.Y; / /区域高度
}
}
>
私人无效GetScreenImgForm_MouseDown(对象发件人,MouseEventArgs的E)
{
如果(e.Button = MouseButtons.Left!)返回;
如果(this.isOption )返回;
imgRect.X =的eX; / /开始X轴
imgRect.Y = EY; / /开始Y轴
> this.isDraw = TRUE ;/ /允许绘图
}
私人无效GetScreenImgForm_MouseMove(对象发件人,MouseEventArgs的E)
{
如果(isDraw)
> {
/ /刷新图像;
this.isOption = TRUE;
>点P1 =新的点(imgRect.X,imgRect.Y);
点P2 =新的点(EX,imgRect。 Y);
点P3 =新的点(imgRect.X,EY);
点P4 =新的点(EX,EY);
/ /画四条边框 g.DrawLine(钢笔,P1,P2);
g.DrawLine(钢笔,P2,P4);
g.DrawLine(钢笔,P4,P3);
克。的DrawLine(钢笔,P3,P1);
}
{
/ /判断用户选择的区域
诠释顶级= imgRect.Y;
整型下来= imgRect.Y + imgRect.Height;
整数左= imgRect.X;
整数右= imgRect.X + imgRect.Width;
/ /鼠标选择区域变得看看
如果(EX系列>左&&的eX 顶部&& EY <向下)
{
this.Cursor = Cursors.SizeAll; } {
this.Cursor = Cursors.Cross;
}
}
}
私人无效GetScreenImgForm_MouseDoubleClick(对象发件人, MouseEventArgs的E)
{
{
/ /用户双击所选区域尝试.....
如果(this.Cursor ==游标。 SizeAll)
{
位图B =新的位图(this.screenImg);。
位图IMG = b.Clone(this.imgRect,System.Drawing.Imaging PixelFormat.DontCare );
SaveFileDialog DLG =新SaveFileDialog();
dlg.Filter =“..(* JPG格式)| * JPG”;
如果(dlg.ShowDialog()= DialogResult.OK!)返回;
img.Save(dlg.FileName);
this.Close();
}
}
赶上(例外ERR)
{
的MessageBox.show(err.message中);
}
}
>}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询