在一類新的頂部:爲什麼在改變點半徑大小時工作速度太慢?
private Random r = new Random();
public int numberOfPoints = 100;
public Bitmap bmpWithPoints;
然後在類Initi方法:
public void Init()
{
bmpWithPoints = GetBitmapWithEllipses(1.0f);
}
然後則方法GetBitmapWithEllipses:
private Bitmap GetBitmapWithEllipses(float radius)
{
Bitmap bmp = new Bitmap(512, 512);
Random r = new Random();
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.Black);
g.SmoothingMode = SmoothingMode.AntiAlias;
List<RectangleF> rects = new List<RectangleF>();
rects.Add(new RectangleF(0, 0, 0, 0));
for (int x = 0; x < numberOfPoints; x++)
{
for (int y = 0; y < numberOfPoints; y++)
{
Color c = Color.FromArgb(
r.Next(0, 256),
r.Next(0, 256),
r.Next(0, 256));
PointF p = new PointF(r.Next(bmp.Width), r.Next(bmp.Height));
RectangleF rect = new RectangleF(p, new SizeF(radius * 2, radius * 2));
if (!rects.Any(tmp => tmp.IntersectsWith(rect)))
{
rects.Add(rect);
g.FillEllipse(new SolidBrush(c), rect);
}
else
{
y--;
}
}
}
}
return bmp;
}
在Form1頂部和構造:
DopplerEffect de = new DopplerEffect();
public Form1()
{
InitializeComponent();
de.bmpWithPoints = new Bitmap(512, 512);
de.numberOfPoints = 50;
de.Init();
}
在我遇到問題之前,GetBitmapWithEllipses方法很慢,因爲將點數設置爲50.現在這部分工作很快,但現在將半徑大小更改爲5.0f或10.0f時,它非常緩慢。
當我在Form1中的線設置的點的數量爲10或20或50:
de.numberOfPoints = 50;
在類的方法GetBitmapWithEllipses將工作速度快。 但是,如果我在課堂上改變了每個點的半徑大小,例如1.0f,它將工作得很快。但是,如果我將點數設置爲50,並將半徑大小更改爲10.0f,例如GetBitmapWithEllipses方法的工作速度非常慢。甚至到5.0f
當改變每個點的半徑大小時,是否有任何方法可以使它快速工作?
你隨意在循環建立的社交圈,如果創建的圈子有與之前創建的省略號重疊,您可以向後循環。當收音機增長時,重疊的機會增加,所以你向後退一步,循環需要更長時間才能完成。 –