Aplikacja do zmiany rozmiaru zdjecia

0

Ponieważ mam problem przy pisianiu aplikacji- zmieniającą rozmiar zdjęcia tak aby nowe zdjęcie miało 50KB.
Czy mógłby mi ktoś podpowiedzieć w jaki sposób można by to zrobić ?

Moje rozwiązanie bazuje na skalowaniu wczytanego obrazka za pomoca klasy Bitmap z odpowiednim
rozmiarem i zapisaniem do nowego pliku graficznego.
Nastepenie sprawdzenia czy rozmiar pliku spełnia określone warunki ( wielkość )
jeśli Nie to wykonuje kolejne skalowanie z rozmiarem o jeden mniejsze na x i y

Probem jaki napotykam podczas rozwiązywania to brak pamięci oraz problem z zwolnieniem pliku
graficznego.

Będę wdzięczny za każdą pomoc.

0

Po co zapisywać na dysk, nie można sprawdzić w pamięci?

0

a w jaki sposób mogę to sprawdzić?

0
using System.IO;
using System.Drawing.Imaging;

Bitmap bm = new Bitmap(@"C:\test.bmp");
MemoryStream ms = new MemoryStream();
bm.Save(ms,ImageFormat.Bmp);
int wielkosc = ms.Capacity;
0

ok,
Wykorzystałem metode chemicalkash i stworzylem cos takiego:

    while (_fileSize > _minSize)
                            {
                                sX=sX-50;
                                sY=sY-50;
                                rozmiar = new Size(sX, sY);

                                bmp = new Bitmap(Image.FromFile(inputLoc), rozmiar);
                                MemoryStream ms = new MemoryStream();
                                bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                                _fileSize = ms.Capacity;
                            }
                          
                          bmp.Save(outputLoc, System.Drawing.Imaging.ImageFormat.Jpeg);

I tu pojawia mi się błąd Pamięci?

Czy jest jakiś sposób na ominięcie tego błędu?

Poz.

0
using(bmp = new Bitmap(Image.FromFile(inputLoc), rozmiar)) {
 // bla bla bla
}

Drugi post to samo :-)

0

Pomimo zastosowania using pamiec operacyjna jest zuzywana w duzych ilosciahc :/

0

Pokaż cały fragment kodu

0
Bitmap bmp = null;
            FileInfo info;
            if ((x.Text != "") & (y.Text != ""))
            {
                int c2 = 0;
                for (int i = 0; i < picList.Items.Count; i++)
                {
                    try
                    {
                        int sX = 0;
                        int sY = 0;
                        
                        string inputLoc = location + "\\" + picList.Items[i].ToString();
                        string outputLoc = outLocation + "\\" + picList.Items[i].ToString();

                        Bitmap _orgRozm = new Bitmap(Image.FromFile(inputLoc));
                        sX = _orgRozm.Width;
                        sY = _orgRozm.Height;
                        Size rozmiar = new Size(sX, sY);
                        int _minSize = 50000;
                        
                        info = new FileInfo(inputLoc);
                        long _fileSize = info.Length;

                        string tmpPicture = "tmp.jpg";

                        if (_fileSize < _minSize)
                        {
                            bmp = new Bitmap(Image.FromFile(inputLoc), rozmiar);
                            bmp.Save(outLocation, System.Drawing.Imaging.ImageFormat.Jpeg);
                        }
                        else
                        {
                             info = new FileInfo(inputLoc);
                             _fileSize = info.Length;
                             int count = 0;
                            while (_fileSize > _minSize)
                            {
                                sX=sX-50;
                                sY=sY-50;
                                rozmiar = new Size(sX, sY);

                                using (Bitmap bmp2 = new Bitmap(Image.FromFile(inputLoc), rozmiar))
                                {
                                    using (MemoryStream ms = new MemoryStream())
                                    {
                                        bmp2.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                                        _fileSize = ms.Capacity;
                                    }
                                }
                                
                            
                            }

                            using (Bitmap bmp3 = new Bitmap(Image.FromFile(inputLoc), rozmiar))
                            {
                                bmp3.Save(outputLoc, System.Drawing.Imaging.ImageFormat.Jpeg);
                            }
                            
                        }
                        
                       // bmp.Save(outputLoc, System.Drawing.Imaging.ImageFormat.Jpeg);
                    }
                    catch(Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }

                }
0

Dodaj using do orgRozm .. i wszystkiego innego co dziedziczy po IDisposable (jeśli się znajdzie)

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