C#如何解决带透明度画笔的“青蛙卵”现象,速度仍然流畅?
我用GDI+做带有透明度的画笔,实现后出现“青蛙卵”现象,目前有方法解决,但是速度不流畅,会滞后,希望有高人能把青蛙卵解决了 ,同时速度又不受影响的。
下面贴了代码 只是实现带透明度功能。需要解决有透明度时,不会出现青蛙卵,速度也不受影响。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace Alpha_Pen
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Point startPoint,secondPoint;
bool drawMove;
Pen pen;
Bitmap bit;
Graphics g;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
startPoint = new Point(e.X, e.Y);
drawMove = true;
}
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (drawMove)
{
pen = new Pen(Color.FromArgb(128,255,0,0),20);
pen.StartCap = LineCap.Round;
pen.LineJoin = LineJoin.Round;
pen.EndCap = LineCap.Round;
secondPoint = new Point(e.X,e.Y);
g.DrawLine(pen,startPoint.X,startPoint.Y,secondPoint.X,secondPoint.Y);
startPoint = secondPoint;
pictureBox1.Invalidate();
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
drawMove = false;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (bit != null)
{
e.Graphics.DrawImage(bit, 0, 0);
}
}
private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Width = 1920;
pictureBox1.Height = 1080;
bit= new Bitmap(pictureBox1.Width, pictureBox1.Height);
g = Graphics.FromImage(bit);
}
}
}
------解决方案--------------------
楼主!
你可以在paint事件里实时刷新改成局部刷新,整个全部刷新速度会慢。
你可以根据第一点和第二点两点确定一个矩形,然后在paint中只刷新改矩形区域!