thiago costa

thiago costa

  • NA
  • 319
  • 0

--RESOLVED-- How to dispose a GifEncoder ?

Jun 4 2013 9:46 PM
Hello guys... I am working on a program, that will pick 6 JPG files, and turn them into a animated GIF...
IT WORKS !!!
The only problem is, that, untill I close the WINDOWS FORMS, the .GIF file stays in use...
I need the .GIF file outputed, to be released as soon as it is done.
Please help..
Thanks guys.

        string _picture1 ="c:\\C1.jpg";
        string _picture2 = "c:\\C2.jpg";
        string _picture3 = "c:\\C3.jpg";
        string _picture4 = "c:\\C4.jpg";
        string _picture5 = "c:\\C5.jpg";
        string _picture6 = "c:\\C6.jpg";

 try
{
String[] imageFilePaths = new String[] { _picture1, _picture2, _picture3, _picture4, _picture5,_picture6 };
// String[] imageFilePaths = new String[] { _picture1, _picture2};
String outputFilePath = "c:\\slides\\" + TB_slideid.Text + ".gif";
AnimatedGifEncoder e = new AnimatedGifEncoder();
e.Start(outputFilePath);
e.SetDelay(3000);
//-1:no repeat,0:always repeat
e.SetRepeat(0);
for (int i = 0, count = imageFilePaths.Length; i < count; i++)
{
    e.AddFrame(Image.FromFile(imageFilePaths[i]));
}
e.Finish();
/* extract Gif */
string outputPath = "c:\\slides";
GifDecoder gifDecoder = new GifDecoder();
gifDecoder.Read("c:\\slides\\" + TB_slideid.Text + ".gif");
for (int i = 0, count = gifDecoder.GetFrameCount(); i < count; i++)
{
    Image frame = gifDecoder.GetFrame(i); // frame i
    frame.Save(outputPath + Guid.NewGuid().ToString() + ".png", ImageFormat.Png);
}
}

Answers (1)

0
thiago costa

thiago costa

  • 0
  • 319
  • 0
Jun 4 2013 11:23 PM
Problem Resolved..

The problem is, if I had 1 picture string not being used (_picture6) etc, the program would stay waiting for it for ever, no error, no exception, just wait for the file for ever.

Thank you very much guys.


If it helps anybody (I hope it does) here is the complete code

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Gif.Components;
using System.IO;
using System.Drawing.Imaging;
using System.Net;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
namespace Ebay_Generator_beta0._1
{
    public partial class Form1 : Form
    {
        string ftpServerIP;
        string ftpUserID;
        string ftpPassword;       
        public Form1()
        {
            InitializeComponent();
        }
        string _picture1 ="";
        string _picture2 = "";
        string _picture3 = "";
        string _picture4 = "";
        string _picture5 = "";
        string _picture6 = "";
        string _defaultpath = "c:\\";
        private void Form1_Load(object sender, EventArgs e)
        {
            ftpServerIP = "2wheelsgonewild.com";
            ftpUserID = "xxxxx";
            ftpPassword = "xxxxx";            
            //this.Text += ftpServerIP;           
        }
        private void Upload(string filename)
        {
            FileInfo fileInf = new FileInfo(filename);
            string uri = "ftp://" + ftpServerIP + "/public_html/ebay/"+TB_itemid.Text+"/" + fileInf.Name;
            FtpWebRequest reqFTP;
            // Create FtpWebRequest object from the Uri provided
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/public_html/ebay/"+TB_itemid.Text+"/" + fileInf.Name));
            // Provide the WebPermission Credintials
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            // By default KeepAlive is true, where the control connection is not closed
            // after a command is executed.
            reqFTP.KeepAlive = false;
            // Specify the command to be executed.
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            // Specify the data transfer type.
            reqFTP.UseBinary = true;
            // Notify the server about the size of the uploaded file
            reqFTP.ContentLength = fileInf.Length;
            // The buffer size is set to 2kb
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;
            // Opens a file stream (System.IO.FileStream) to read the file to be uploaded
            FileStream fs = fileInf.OpenRead();
            try
            {
                // Stream to which the file to be upload is written
                Stream strm = reqFTP.GetRequestStream();
                // Read from the file stream 2kb at a time
                contentLen = fs.Read(buff, 0, buffLength);
                // Till Stream content ends
                while (contentLen != 0)
                {
                    // Write Content from the file stream to the FTP Upload Stream
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }
                // Close the file stream and the Request Stream
                strm.Close();
                fs.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Upload Error");
            }
        }
        private void button4_Click(object sender, EventArgs e)
        {
            string FileName = "c:\\slides\\" + TB_slideid.Text + ".gif";
            if (TB_itemid.Text != "")
            {
                try
                {
                    WebRequest request = WebRequest.Create("ftp://2wheelsgonewild.com/public_html/ebay/" + TB_itemid.Text + "/");
                    request.Method = WebRequestMethods.Ftp.MakeDirectory;
                    request.Credentials = new NetworkCredential("wheelsgo", "t12457859");
                    using (var resp = (FtpWebResponse)request.GetResponse()) ;                   
                }
                catch
                {
                    MessageBox.Show(" =D Folder already exists, select a new ITEM ID ...lol" + TB_itemid.Text + " is already exists in server :D ");
                }
                Upload(FileName);
            }
            else
            {
                MessageBox.Show("Make sure ITEM ID is not empty. -.-''");
            }           
            //
        }
        /// GENERATE
        private void button1_Click(object sender, EventArgs x)
        {
            int _piccount = 0;
            if (TB_slideid.Text != "")
            {
                if (TB_pic1.Text != "") { _piccount++; }
                if (TB_pic2.Text != "") { _piccount++; }
                if (TB_pic3.Text != "") { _piccount++; }
                if (TB_pic4.Text != "") { _piccount++; }
                if (TB_pic5.Text != "") { _piccount++; }
                if (TB_pic6.Text != "") { _piccount++; }
                if (_piccount == 1) 
                {
                    _1pics();
                }
                if (_piccount == 2) 
                {
                    _2pics();
                }
                if (_piccount == 3) 
                {
                    _3pics();
                }
                if (_piccount == 4) 
                {
                    _4pics();
                }
                if (_piccount == 5) 
                {
                    _5pics();
                }
                if (_piccount == 6) 
                {
                    _6pics();
                }
            }           
            else
            {
                MessageBox.Show("Slide ID can NOT be empty. Type in a Slide Id, it will be asigned to the .GIF FILE NAME");
            }
        }
        private void _6pics()
        {
            try
            {
                String[] imageFilePaths = new String[] { _picture1, _picture2, _picture3, _picture4, _picture5, _picture6 };
                String outputFilePath = "c:\\slides\\" + TB_slideid.Text + ".gif";
                AnimatedGifEncoder e = new AnimatedGifEncoder();
                e.Start(outputFilePath);
                e.SetDelay(3000);
                //-1:no repeat,0:always repeat
                e.SetRepeat(0);
                for (int i = 0, count = imageFilePaths.Length; i < count; i++)
                {
                    e.AddFrame(Image.FromFile(imageFilePaths[i]));
                }
                e.Finish();
                /* extract Gif */
                string outputPath = "c:\\slides\\";
                GifDecoder gifDecoder = new GifDecoder();
                gifDecoder.Read("c:\\slides\\" + TB_slideid.Text + ".gif");
                for (int i = 0, count = gifDecoder.GetFrameCount(); i < count; i++)
                {
                    Image frame = gifDecoder.GetFrame(i); // frame i
                    frame.Save(outputPath + Guid.NewGuid().ToString() + ".png", ImageFormat.Png);
                }
            }
            catch
            {
            }
        }
        private void _5pics()
        {
            try
            {
                String[] imageFilePaths = new String[] { _picture1, _picture2, _picture3, _picture4, _picture5};
                String outputFilePath = "c:\\slides\\" + TB_slideid.Text + ".gif";
                AnimatedGifEncoder e = new AnimatedGifEncoder();
                e.Start(outputFilePath);
                e.SetDelay(3000);
                //-1:no repeat,0:always repeat
                e.SetRepeat(0);
                for (int i = 0, count = imageFilePaths.Length; i < count; i++)
                {
                    e.AddFrame(Image.FromFile(imageFilePaths[i]));
                }
                e.Finish();
                /* extract Gif */
                string outputPath = "c:\\slides\\";
                GifDecoder gifDecoder = new GifDecoder();
                gifDecoder.Read("c:\\slides\\" + TB_slideid.Text + ".gif");
                for (int i = 0, count = gifDecoder.GetFrameCount(); i < count; i++)
                {
                    Image frame = gifDecoder.GetFrame(i); // frame i
                    frame.Save(outputPath + Guid.NewGuid().ToString() + ".png", ImageFormat.Png);
                }
            }
            catch
            {
            }
        }
        private void _4pics()
        {
            try
            {
                String[] imageFilePaths = new String[] { _picture1, _picture2, _picture3, _picture4};
                String outputFilePath = "c:\\slides\\" + TB_slideid.Text + ".gif";
                AnimatedGifEncoder e = new AnimatedGifEncoder();
                e.Start(outputFilePath);
                e.SetDelay(3000);
                //-1:no repeat,0:always repeat
                e.SetRepeat(0);
                for (int i = 0, count = imageFilePaths.Length; i < count; i++)
                {
                    e.AddFrame(Image.FromFile(imageFilePaths[i]));
                }
                e.Finish();
                /* extract Gif */
                string outputPath = "c:\\slides\\";
                GifDecoder gifDecoder = new GifDecoder();
                gifDecoder.Read("c:\\slides\\" + TB_slideid.Text + ".gif");
                for (int i = 0, count = gifDecoder.GetFrameCount(); i < count; i++)
                {
                    Image frame = gifDecoder.GetFrame(i); // frame i
                    frame.Save(outputPath + Guid.NewGuid().ToString() + ".png", ImageFormat.Png);
                }
            }
            catch
            {
            }
        }
        private void _3pics()
        {
            try
            {
                String[] imageFilePaths = new String[] { _picture1, _picture2, _picture3};
                String outputFilePath = "c:\\slides\\" + TB_slideid.Text + ".gif";
                AnimatedGifEncoder e = new AnimatedGifEncoder();
                e.Start(outputFilePath);
                e.SetDelay(3000);
                //-1:no repeat,0:always repeat
                e.SetRepeat(0);
                for (int i = 0, count = imageFilePaths.Length; i < count; i++)
                {
                    e.AddFrame(Image.FromFile(imageFilePaths[i]));
                }
                e.Finish();
                /* extract Gif */
                string outputPath = "c:\\slides\\";
                GifDecoder gifDecoder = new GifDecoder();
                gifDecoder.Read("c:\\slides\\" + TB_slideid.Text + ".gif");
                for (int i = 0, count = gifDecoder.GetFrameCount(); i < count; i++)
                {
                    Image frame = gifDecoder.GetFrame(i); // frame i
                    frame.Save(outputPath + Guid.NewGuid().ToString() + ".png", ImageFormat.Png);
                }
            }
            catch
            {
            }
        }
        private void _2pics()
        {
            try
            {
                String[] imageFilePaths = new String[] { _picture1, _picture2};
                String outputFilePath = "c:\\slides\\" + TB_slideid.Text + ".gif";
                AnimatedGifEncoder e = new AnimatedGifEncoder();
                e.Start(outputFilePath);
                e.SetDelay(3000);
                //-1:no repeat,0:always repeat
                e.SetRepeat(0);
                for (int i = 0, count = imageFilePaths.Length; i < count; i++)
                {
                    e.AddFrame(Image.FromFile(imageFilePaths[i]));
                }
                e.Finish();
                /* extract Gif */
                string outputPath = "c:\\slides\\";
                GifDecoder gifDecoder = new GifDecoder();
                gifDecoder.Read("c:\\slides\\" + TB_slideid.Text + ".gif");
                for (int i = 0, count = gifDecoder.GetFrameCount(); i < count; i++)
                {
                    Image frame = gifDecoder.GetFrame(i); // frame i
                    frame.Save(outputPath + Guid.NewGuid().ToString() + ".png", ImageFormat.Png);
                }
            }
            catch
            {
            }
        }
        private void _1pics()
        {
            try
            {
                String[] imageFilePaths = new String[] { _picture1};
                String outputFilePath = "c:\\slides\\" + TB_slideid.Text + ".gif";
                AnimatedGifEncoder e = new AnimatedGifEncoder();
                e.Start(outputFilePath);
                e.SetDelay(3000);
                //-1:no repeat,0:always repeat
                e.SetRepeat(0);
                for (int i = 0, count = imageFilePaths.Length; i < count; i++)
                {
                    e.AddFrame(Image.FromFile(imageFilePaths[i]));
                }
                e.Finish();
                /* extract Gif */
                string outputPath = "c:\\slides\\";
                GifDecoder gifDecoder = new GifDecoder();
                gifDecoder.Read("c:\\slides\\" + TB_slideid.Text + ".gif");
                for (int i = 0, count = gifDecoder.GetFrameCount(); i < count; i++)
                {
                    Image frame = gifDecoder.GetFrame(i); // frame i
                    frame.Save(outputPath + Guid.NewGuid().ToString() + ".png", ImageFormat.Png);
                }
            }
            catch
            {
            }
        }
        /// GENERATE
        private void button2_Click(object sender, EventArgs e)
        {
            Stream myStream = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = _defaultpath;
            openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*|JPG files (*.jpg)|*.jpg";
            //openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((myStream = openFileDialog1.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            // Insert code to read the stream here.
                           _picture1 = openFileDialog1.FileName.ToString();
                           TB_pic1.Text = _picture1;
                           _defaultpath = _picture1;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }           
        }
        private void textBox10_TextChanged(object sender, EventArgs e)
        {
        }
        private void BTN_browse2_Click(object sender, EventArgs e)
        {
            Stream myStream = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = _defaultpath;
            openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*|JPG files (*.jpg)|*.jpg";
            //openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((myStream = openFileDialog1.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            // Insert code to read the stream here.
                            _picture2 = openFileDialog1.FileName.ToString();
                            TB_pic2.Text = _picture2;
                            _defaultpath = _picture2;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
        }
        private void BTN_browse3_Click(object sender, EventArgs e)
        {
            Stream myStream = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = _defaultpath;
            openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*|JPG files (*.jpg)|*.jpg";
            //openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((myStream = openFileDialog1.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            // Insert code to read the stream here.
                            _picture3 = openFileDialog1.FileName.ToString();
                            TB_pic3.Text = _picture3;
                            _defaultpath = _picture3;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
        }
        private void BTN_browse4_Click(object sender, EventArgs e)
        {
            Stream myStream = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = _defaultpath;
            openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*|JPG files (*.jpg)|*.jpg";
            //openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((myStream = openFileDialog1.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            // Insert code to read the stream here.
                            _picture4 = openFileDialog1.FileName.ToString();
                            TB_pic4.Text = _picture4;
                            _defaultpath = _picture4;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
        }
        private void BTN_browse5_Click(object sender, EventArgs e)
        {
            Stream myStream = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = _defaultpath;
            openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*|JPG files (*.jpg)|*.jpg";
            //openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((myStream = openFileDialog1.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            // Insert code to read the stream here.
                            _picture5 = openFileDialog1.FileName.ToString();
                            TB_pic5.Text = _picture5;
                            _defaultpath = _picture5;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
        }
        private void BTN_browse6_Click(object sender, EventArgs e)
        {
            Stream myStream = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            openFileDialog1.InitialDirectory = _defaultpath;
            openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*|JPG files (*.jpg)|*.jpg";
            //openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
            openFileDialog1.FilterIndex = 2;
            openFileDialog1.RestoreDirectory = true;
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((myStream = openFileDialog1.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            // Insert code to read the stream here.
                            _picture6 = openFileDialog1.FileName.ToString();
                            TB_pic6.Text = _picture6;
                            _defaultpath = _picture6;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                }
            }
        }
        /// UPLOAD
        private void button3_Click(object sender, EventArgs e)
        { }
        private void button5_Click(object sender, EventArgs e)
        {
            //("c:\\slides\\descript.jpg");
            string inputImage = @"c:\slides\descript.png";
            string outputImageFilePath = @"c:\slides\descript2.png";
        string textToDisplayOnImage = TB_description.Text;
        Bitmap imageInBitMap = new Bitmap(inputImage);
        Graphics imageGraphics = Graphics.FromImage(imageInBitMap);
        //Set the alignment based on the coordinates 
        StringFormat formatAssignment= new StringFormat();
        formatAssignment.Alignment = StringAlignment.Near;       
        //Here we are going to assign the font color
        Color assignColorToString = System.Drawing.ColorTranslator.FromHtml("#ffffff");
        //Assigning font size, font family, position of the text to display and others.
        imageGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
        imageGraphics.DrawString(textToDisplayOnImage, new Font("Raleigh Rock", 13, FontStyle.Bold), new SolidBrush(assignColorToString), new Point(20, 100), formatAssignment);
        //saving in the computer
        imageInBitMap.Save(outputImageFilePath);
       }
    }
}