winfrom 关于在picturebox上重绘缓慢问题 附源码

winfrom 关于在picturebox上重绘缓慢问题 附源码

这个是我要操作的图片,需要您把picturebox添加到一个form窗体中然后绑定以下事件

public Form2()

{

InitializeComponent();

}

Bitmap Ima = new Bitmap("b.jpg");

private void Form2_Load(object sender, EventArgs e)

{

pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;

        pictureBox1.Image = Ima; pictureBox1.Location = new Point(0, 0);

pictureBox1.Size = new Size(14000, 800);

}

Point p1 = new Point(); Point p2 = new Point(); bool status = false;

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)

{

if (e.Button == MouseButtons.Left)

{

p1 = new Point(e.X, e.Y); status = true;

}

}

Rectangle rec = new Rectangle();

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)

{

Point p2 = new Point(e.X, e.Y);

if (p2.X < 0)

{

p2.X = 0;

}

if (p2.Y < 0)

{

p2.Y = 0;

}

if (p2.X > pictureBox1.Width)

{

p2.X = pictureBox1.Width;

}

if (p2.Y > pictureBox1.Height)

{

p2.Y = pictureBox1.Height;

}

if (p2.X > p1.X)

{

rec.X = p1.X;

rec.Width = p2.X - p1.X;

}

else

{

rec.X = p2.X;

rec.Width = p1.X - p2.X;

}

if (p2.Y > p1.Y)

{

rec.Y = p1.Y;

rec.Height = p2.Y - p1.Y;

}

else

{

rec.Y = p2.Y; rec.Height = p1.Y - p2.Y;

}

this.Refresh();

}

private void pictureBox1_Paint(object sender, PaintEventArgs e)

{

if (status)

{

Graphics gg = e.Graphics;

gg.DrawRectangle(new Pen(Color.Red, 2), rec);

}

}

以上是我的代码,出现重绘缓慢的是鼠标左键在控件中点击以下 然后拖动绘制矩形很慢跟不上鼠标的速度,我切换其它图片就没有问题,并且picturebox大小变成20000*800不存在这个问题

回答:

如延迟(与上次处理时间比对进行延迟)Invalidate,或者MouseUp Invalidate;

不过按道理说这点消耗在GDI+ Frameworks 2.0后不存在。我怀疑你其他影响到“绘制性能”了,如用的this.Refresh(),你应该用pictureBox1.;甚至更小的区域做参数。

回答:

我尝试以下 麻烦您创建一个demo帮我也看看 谢谢您

回答:

刚刚尝试了 没效果。。

回答:

如果我把pictureBox1.Size改成 = new Size(20000, 800);他的绘制速度就跟得上我的鼠标就是正常的

回答:

但是如果这样更改的话和需求不对应 没啥用 我还是得解决目前这个问题

回答:

@余道长: 用pictureBox1.Invalidate(Rectangle())会好点。这种Demo MSDN是很多的(MS过去的SDK都有很详细的Demo),粘贴就有了。做控件样式现在很少用重绘,GDI+也顶多用在Bitmap上面,学习玩玩就行了。WPF数倍的开发效率,现在别个c++都玩Direct UI,想比GDI+的硬件加速,硬件利用率更高。

你这种写法也不对,既然只是画个矩形,干嘛在那么“重”的控件上画,反正你又不是画到Bitmap上,自己想想。你可以这么试,扔弃一切东西,直接在窗口或者只加一个Control(不要做任何操作)上绘制,如果还卡,应该机器可以扔了。

winfrom 关于在picturebox上重绘缓慢问题 附源码

背景是类似天空的容器,图片比你这大很多,包含了一个图表(右下角就是Resize,是即时的),很正常。

回答:

@花飘水流兮: 我正在测试 没问题得话就你了

回答:

有一定提升,谢谢了 我再研究研究

回答:

@花飘水流兮: 我其实是画的矩形控件然后功能做完了 效果不是很理想 就这样弄得demo来测试得

以上是 winfrom 关于在picturebox上重绘缓慢问题 附源码 的全部内容, 来源链接: utcz.com/a/120648.html

回到顶部