2 pytanka odnośnie wrzucania zdjęć do jakiegoś komponentu.

0

Witam,
Pierwsze moje pytanie to w jaki sposob sie wczytuje zdjecia do jakiegos komponentu ? Tzn ja zrobilem to tak ze mam treeview do ktorego zaladowalem sobie katalogi i pozniej po kliknieciu na katalog na panelu tworza mi sie kolejno dynamicznie pictureboxy ale cos strasznie to wolno dziala bo na poczatku tworze sobie Image, zamieniamem go do bitmapy , pozniej funkcja zczytuje thumbnail i dopiera ja wyswietlam w pictureboxie.
Jak to zrobic szybciej ?

Drugie pytanke to do czego uzywane sa pliku thumbs.db w acdsee ? Wiem ze ma to znaczenie przy ladowaniu kolejny raz tego samego katalogu zeby bylo szybcie ale na czym to polega?

0

A ile masz tych zdjęć, w jakiej rozdzielczości i w jakim formacie? Może wartoby było przed wrzuceniem do PictureBox-a je strech-ować żeby nie zeżreć całego RAM-u?

Jeśli nie zmieniasz rozmiaru to użyj metody
PictureBox1.Image.FromFile()

0
darek963 napisał(a)

A ile masz tych zdjęć, w jakiej rozdzielczości i w jakim formacie? Może wartoby było przed wrzuceniem do PictureBox-a je strech-ować żeby nie zeżreć całego RAM-u?

Jeśli nie zmieniasz rozmiaru to użyj metody
PictureBox1.Image.FromFile()

Fotki duze maja z 200kb i duze rozdzielczosci. Robie to w ten sposob:

public Image GetThumb(Bitmap myBitmap)
        {
            Image.GetThumbnailImageAbort myCallback = new Image.GetThumbnailImageAbort(ThumbnailCallback);
            return myBitmap.GetThumbnailImage(100, 100, myCallback, IntPtr.Zero);
        }

 foreach (FileInfo plikitem in dir.GetFiles("*.jpg"))
            {

                Image a = Image.FromFile(plikitem.FullName);
                Bitmap bit = new Bitmap(a);
                PictureBox tekst = new PictureBox();
                tekst.Click += new EventHandler(Klikniecie);
                toolStripProgressBar1.Value = licz;
                Application.DoEvents();
                tekst.Image = GetThumb(bit);
                tekst.Size = GetThumb(bit).Size;

                if (licz % ile == 0 && licz!=0)
                {
                    x = 0;
                    y = y+100;
                }
                tekst.Location = new System.Drawing.Point(x, y);
                tekst.Tag = plikitem.FullName;
                tekst.SizeMode = PictureBoxSizeMode.Zoom;
                tekst.BorderStyle = BorderStyle.Fixed3D;

                toolStripLabel2.Text = Convert.ToString(licz + 1);

                x += GetThumb(bit).Size.Width+5;
                panel2.Controls.Add(tekst);
                licz++;
            }

Wyszukuje sobie pliki jpg i z nich robie petle, wyswietlam je w sposob jak powyzej, ale jakos wolno to sie rysuje.
40 zdjęc wczytuje sie 15 sekund , jak ktos bedzie mialw katalogu ze 100 to bedzie poraznka. Pytam bo np ZoomBrowser czy acdsee robia to blyskawicznie wiec musi byc jakas inna metoda.

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