Picturebox i odświeżanie

0

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ę.

0

Problem rozwiązany :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1