Diskuze: Ukládání obrázku na disk

C# .NET .NET (C# a Visual Basic) Ukládání obrázku na disk American English version English version

Avatar
Matyáš Černohous (Matesak):

Zdravím, chtěl bych obrázek z aplikace, který je v pictureboxu, uložit na disk. Problém je v tom, že pictureBoxy přidávám až v aplikaci, podle počtu obrázků. Chtěl jsem to udělat takhle:

SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "Images|*.png;*.bmp;*.jpg";

                ImageFormat format = ImageFormat.Png;
                if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    string ext = System.IO.Path.GetExtension(sfd.FileName);
                    switch (ext)
                    {
                        case ".jpg":
                            format = ImageFormat.Jpeg;
                            break;
                        case ".bmp":
                            format = ImageFormat.Bmp;
                            break;
                    }
                  picturebox.Image.Save(sfd.FileName, format);
                }

Problém je v tom, že já nemám v aplikaci zatím vytvořený ani jeden picturebox, takže mi to v

picturebox.Image.Save(sfd.FileName, format);

hlásí chybu. Nevíte jak by se to dalo udělat jinak, abych tam mohl hodit zatím neexistující picturebox ?
Díky

Editováno 21.1.2014 20:34
 
Odpovědět 21.1.2014 20:34
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Michal Žůrek (misaz):

tak snad je máš v nějaké kolekci, ověříš jejich počet a pustíš to pouze pokud jich je víc než 0.

Nahoru Odpovědět 21.1.2014 21:26
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Matyáš Černohous (Matesak):

Oh, to mě nenapadlo. Díky :)...

Měl bych ještě jeden problém. Obrázky tam dostávám pomocí Drag and Drop. Vytvořil jsem si lisst, kam chci ukládat cesty k obrázkům.

List<string> CestakObr = new List<string>();

a když uživatel přetáhne obrázek, tak tam přidám cestu k souboru

string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
           foreach (string filePath in files)
           {

               AddPb(filePath, PictureX);
               CestakObr.Add(filePath);
           }

ale když chci ten list vypsat richTextBoxu, tak se mi tam vypíše pouze cesta k poslednímu obrázku i když jsem jich tam vložil třeba 8.

foreach (object item in CestakObr)
           {
               richTextBox1.Text = item.ToString();
           }

Díky

 
Nahoru Odpovědět 22.1.2014 16:38
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Jan Vargovský:

Si to debugni co ti tam přijde v těch datech, jestli je to opravdu pole a co v něm je.

 
Nahoru Odpovědět  +1 22.1.2014 16:42
Avatar
Odpovídá na Jan Vargovský
Matyáš Černohous (Matesak):

Je zajímavé, že pokud list vypisuji do ListBoxu pomocí

foreach (object item in CestakObr)
           {
               listBox2.Items.Add(item.ToString());
           }

tak to funugje, ale když to chci vypsat jinam, tak ne...

 
Nahoru Odpovědět 22.1.2014 20:11
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Matyáš Černohous (Matesak)
Jan Vargovský:

Teď koukám na ten poslední příspěvek. Dáváš všechno do RichTextBoxu, ale vždycky nastavíš jen jednu cestu.
Takže změn:

foreach (object item in CestakObr)
            {
                richTextBox1.Text = item.ToString();
            }

Na:

foreach (object item in CestakObr)
            {
                richTextBox1.Text += item.ToString() + Environment.NewLine;
            }
 
Nahoru Odpovědět 22.1.2014 20:28
Avatar
Odpovídá na Jan Vargovský
Matyáš Černohous (Matesak):

Díky :), jsem si říkal, že chyba bude asi v tomhle, ale nevěděl jsem jak to upravit...

 
Nahoru Odpovědět 22.1.2014 21:28
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.