Autor Beitrag
PlooserX
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 27.11.13 20:52 
Moin,

ich bin momentan dabei ein kleines Programm zu basteln. Und zwar geht es um ein Bildprogramm.
Funktionsprinzip:
Wenn ein Bild mit der Kamera gemacht wird, wird dies in ein Ordner übertragen.
Diesen Ordner lese ich mit Getfiles aus.
Es gibt eine große PictureBox und 8 kleine. Das aktuellste Bild wird immer in die große PictureBox geladen und die nächst älteren kommen in die kleinen Pictureboxen.

Das laden der Bilder würde an und für sich ganz gut klappen. Aber sobald ich anfange die größe der Bilder auszulesen und die größe der PictureBoxen anpassen möchte (Hoch-,Querformat,Skalierung), wird das alles super langsam. D.h. ich kann dem anpassen der Bilder zusehen.

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
        private void Ausgabe()
        {
            lblCountPics.Text = "Anzahl Bilder: " + Convert.ToString(countPics) + "";

            double count = (Convert.ToDouble(countPics) / 8);
            countPages = Math.Ceiling(count);
            lblPage.Text = "Seite " + actPage + " / " + countPages + "";
try
                {
                    pcbSmall1.Visible = true;

                    Image img = Image.FromFile(Files[countPics - 2 - ((actPage - 1) * 8)]);

                    int breite = img.Width;
                    int höhe = img.Height;

                    if (höhe > breite)      //Hochformat
                    {
                        int neueHöhe = 270;
                        int neueBreite = breite * neueHöhe / höhe;

                        System.Drawing.Image Angepasst = new System.Drawing.Bitmap(img, neueBreite, neueHöhe);
                        pcbSmall1.SizeMode = PictureBoxSizeMode.CenterImage;
                        pcbSmall1.Height = neueHöhe;
                        pcbSmall1.Width = neueBreite;
                        pcbSmall1.Image = Angepasst;
                        actPicture[1] = 1;
                    }
                    else                    //Querformat
                    {
                        int neueHöhe = 140;
                        int neueBreite = breite * neueHöhe / höhe;

                        System.Drawing.Image Angepasst = new System.Drawing.Bitmap(img, neueBreite, neueHöhe);
                        pcbSmall1.SizeMode = PictureBoxSizeMode.CenterImage;
                        pcbSmall1.Height = neueHöhe;
                        pcbSmall1.Width = neueBreite;
                        pcbSmall1.Image = Angepasst;
                    }

                }

                catch { pcbSmall1.Visible = false; }
// und noch 7x



        Thread pictureUpdate;

        private void UpdatePictures()
        {
            countPics = 0;

            Files = Directory.GetFiles(pfad, "*.jpg");

            foreach (string filePath in Files)
            {
                countPics++;
                actCountPics = countPics;
            }
        }


Dieser Code findet 8 mal hintereinander statt. Jedes mal wenn ein neues Bild in den Ordner eingefügt wird und getfiles dieses erkannt hat, dann wird das ganze wiederholt.

Hat einer vielleicht eine Idee wodran das liegen kann? Oder bin ich mit den PictureBoxen nicht an der richtigen Adresse?

Gruß
PlooserX
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 27.11.13 23:57 
Hallo!

Wo genau wird es denn langsam? Hast Du mal mit einem Profiler (oder eher "zu Fuß" mit der Stopwatch-Klasse) geschaut, wo das passiert?

Generell ist das Laden von Bildern mittels Image recht langsam. Du kannst die ImageFast-Klasse benutzen, um das sehr zu beschleunigen.

Viele Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".