Witam,
mam problem z odświeżaniem pictureboxa. Piszę program wizualizujący rozrost ziarna, lecz przy powiedzmy kolejnej "warstwie" jej wnętrze się usuwa i widać samą ramkę (przykład w załączniku) i nie mam pojęcia jak to poprawić, kod funkcji poniżej:
void vonNeumann(int[,] T, int[,] tmpT, int dimX, int dimY, List<Grain> grain, PictureBox pb, Graphics g, Dictionary<int, ColorG> _oColorG)
{
pb.Image = new Bitmap(pb.Width, pb.Height);
g = Graphics.FromImage(pb.Image);
////Console.WriteLine("Von Neumann");
for (int i = 1; i < dimX + 1; i++)
{
for (int j = 1; j < dimY + 1; j++)
{
List<int> grainID = new List<int>();
if (tmpT[i, j] == 0)
{
int iPrev = i - 1;
int iNext = i + 1;
int jPrev = j - 1;
int jNext = j + 1;
if (tmpT[i, jPrev] > 49)
{
T[i - 1, j - 1] = tmpT[i, jPrev];
grainID.Add(T[i - 1, j - 1]);
}
if (tmpT[iPrev, j] > 49)
{
T[i - 1, j - 1] = tmpT[iPrev, j];
grainID.Add(T[i - 1, j - 1]);
}
if (tmpT[iNext, j] > 49)
{
T[i - 1, j - 1] = tmpT[iNext, j];
grainID.Add(T[i - 1, j - 1]);
}
if (tmpT[i, jNext] > 49)
{
T[i - 1, j - 1] = tmpT[i, jNext];
grainID.Add(T[i - 1, j - 1]);
}
int popularNumber = rules.dominant(grainID);
if (popularNumber > 0)
{
T[i - 1, j - 1] = popularNumber;
grain.Add(new Grain(i - 1, j - 1, T[i - 1, j - 1]));
ColorG colorG = _oColorG[T[i - 1, j - 1]];
R = colorG.colorR;
G = colorG.colorG;
B = colorG.colorB;
brush = new SolidBrush(Color.FromArgb(R, G, B));
g.FillRectangle(brush, i - 1, j - 1, 1, 1);
pb.Invalidate();
}
}
else
{
T[i - 1, j - 1] = tmpT[i, j];
}
}
}
}
Wiem, że pewnie dałoby się to zrobić inaczej, lepiej etc ale najpierw chciałbym by działało to poprawnie a póxniej nad wyglądem popracuję.