1° pezzo
codice:
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Text;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Web;
namespace gdi
{
    public static class img
    {
        static img()
        {

        }

        public enum FormatoOutput
        { 
            jpg, png, bmp, gif
        }

        public static Bitmap ImgLoad(string immagineInput)
        {
            try
            {
                Bitmap bmp = (Bitmap)System.Drawing.Image.FromFile(immagineInput);
                return bmp;

            }
            catch (System.IO.FileNotFoundException ex)
            { throw new Exception("File non trovato"); }
            
            catch (System.IO.FileLoadException ex)
            { throw new Exception("Errore lettura file"); }

            catch (Exception ex)
            { throw; }
        }

        public static Bitmap ImgLoad(HttpPostedFile immagineInput)
        {
            Bitmap bmp = (Bitmap)System.Drawing.Image.FromStream(immagineInput.InputStream);
            return bmp;
        }






        public static void ImgSaveToFile(Bitmap bmp, string immagineOutput, FormatoOutput formatoOutput, int compressione)
        {
            //correggo l'estensione del file rispetto al formato scelto
            immagineOutput = fileOutput(immagineOutput, formatoOutput);

            //0 = minima qualità, 100=massima
            if (compressione < -1 || compressione > 100) compressione = -1;

            EncoderParameters encParams = new EncoderParameters();
            EncoderParameter encParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compressione);
            encParams.Param[0] = encParam;
            System.Drawing.Imaging.ImageCodecInfo[] imagCodecs = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
            System.Drawing.Imaging.ImageCodecInfo imageCodec = null;
            for (int i = 0; i < imagCodecs.Length; i++)
            {
                if (imagCodecs[i].MimeType == "image/jpeg")
                {
                    imageCodec = imagCodecs[i];
                    break;
                }
            }

            if (formatoOutput == FormatoOutput.jpg)
            {
                if (compressione == -1)
                {
                     bmp.Save(immagineOutput, System.Drawing.Imaging.ImageFormat.Jpeg);
                }
                else
                {
                    bmp.Save(immagineOutput, imageCodec, encParams);
                }
            }

            else if (formatoOutput == FormatoOutput.gif)
            {
                bmp.Save(immagineOutput, System.Drawing.Imaging.ImageFormat.Gif);

            }

            else if (formatoOutput == FormatoOutput.bmp)
            {
                bmp.Save(immagineOutput, System.Drawing.Imaging.ImageFormat.Bmp);
            }

            else if (formatoOutput == FormatoOutput.png)
            {
                bmp.Save(immagineOutput, System.Drawing.Imaging.ImageFormat.Png);
            }


        }


        public static void ImgSaveToResponseOutputStream(Bitmap bmp, FormatoOutput formatoOutput, int compressione)
        {
            //0 = minima qualità, 100=massima
            if (compressione < -1 || compressione > 100) compressione = -1;

            EncoderParameters encParams = new EncoderParameters();
            EncoderParameter encParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compressione);
            encParams.Param[0] = encParam;
            System.Drawing.Imaging.ImageCodecInfo[] imagCodecs = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
            System.Drawing.Imaging.ImageCodecInfo imageCodec = null;
            for (int i = 0; i < imagCodecs.Length; i++)
            {
                if (imagCodecs[i].MimeType == "image/jpeg")
                {
                    imageCodec = imagCodecs[i];
                    break;
                }
            }

            if (formatoOutput == FormatoOutput.jpg)
            {
                if (compressione == -1)
                {
                    System.Web.HttpContext.Current.Response.ContentType = "image/jpeg";
                    bmp.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
                }
                else
                {
                    System.Web.HttpContext.Current.Response.ContentType = "image/jpeg";
                    bmp.Save(System.Web.HttpContext.Current.Response.OutputStream, imageCodec, encParams);
                }
            }

            else if (formatoOutput == FormatoOutput.gif)
            {
                System.Web.HttpContext.Current.Response.ContentType = "image/gif";
                bmp.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
            }

            else if (formatoOutput == FormatoOutput.bmp)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);

                    System.Web.HttpContext.Current.Response.ContentType = "image/bmp";
                    ms.WriteTo(System.Web.HttpContext.Current.Response.OutputStream);
                }
            }

            else if (formatoOutput == FormatoOutput.png)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                    System.Web.HttpContext.Current.Response.ContentType = "image/png";
                    ms.WriteTo(System.Web.HttpContext.Current.Response.OutputStream);
                }
            }

            bmp.Dispose();
            System.Web.HttpContext.Current.Response.End();
        }        
        
        
        //'******************************************************
        public static void ImgSaveToFile(Bitmap bmp, string immagineOutput, FormatoOutput formatoOutput)
        {
            ImgSaveToFile(bmp, immagineOutput, formatoOutput, -1);
        }


        //'formato jpg, compressione standard
        public static void ImgSaveToFile(Bitmap bmp, string immagineOutput)
        {
            ImgSaveToFile(bmp, immagineOutput, FormatoOutput.jpg, -1);
        }
        public static void ImgSaveToResponseOutputStream(Bitmap bmp)
        {
            ImgSaveToResponseOutputStream(bmp, FormatoOutput.jpg, -1);
        }


        //'uscita in response.outputstream, compressione standard se si sceglie formato jpg
        public static void ImgSaveToResponseOutputStream(Bitmap bmp, FormatoOutput formatoOutput)
        {
            ImgSaveToResponseOutputStream(bmp, formatoOutput, -1);
        }

        //'******************************************************
        
        
        
        
        /*--------------------------------------------------------------------------------------------------------------------------------------------------------
         * Serve per ridimensionare immagini
         * se width e height sono > 0, l'immagine viene ridimensionata
         * porre width e height = -1 o 0 per non ridimensionare l'immagine
         * se specifico width e height vengono usati questi valori e l'immagine può essere deformata
         * se specifico whidth e height = 0, o viceversa, vengono rispettati i rapporti w/h
         * interpolazione: se InterpolationMode.Invalid, viene usato il predefinito
         * ingrandisciPerAdattare: vero=ingrandisce l'immagine per adattarla alle dimensioni
         * -------------------------------------------------------------------------------------------------------------------------------------------------------*/
        public static void ImgResize(ref Bitmap bmp, int width, int height, System.Drawing.Drawing2D.InterpolationMode interpolazione, bool ingrandisciPerAdattare)
        {
            Bitmap MiniaturaBmp = null;
            Graphics gr = null;

            // c'è da ridimensionare? 'l'immagine non viene ingrandita?
            if( !ingrandisciPerAdattare)
                ingrandisciPerAdattare = bmp.Width > width && bmp.Height > height;
            
            if( (width > 0 || height > 0) && ingrandisciPerAdattare )
            {
                // se è specificata solo la larghezza, calcola l'altezza 
                if( height <= 0 )
                    height = Convert.ToInt32((double)width * (double)bmp.Height / (double)bmp.Width);

                // (e viceversa) 
                if ( width <= 0 )
                    width = Convert.ToInt32((double)height * (double)bmp.Width / (double)bmp.Height);

                // creo l'immagine ridimensionata con i parametri impostati 
                if( interpolazione == System.Drawing.Drawing2D.InterpolationMode.Invalid)
                {
                    MiniaturaBmp = new System.Drawing.Bitmap(bmp, width, height);
                    //MiniaturaBmp.SetResolution(72, 72)
                }
                else
                {
                    MiniaturaBmp = new System.Drawing.Bitmap(width, height);
                    //'MiniaturaBmp.SetResolution(72, 72)
                    gr = Graphics.FromImage(MiniaturaBmp);
                    gr.InterpolationMode = interpolazione;

                    //se voglio alta qualità (HighQualityBicubic) imposto qualità altri parametri
                    if (interpolazione == System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic)
                    {
                        gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                        gr.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                        gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                    }

                    //gr.DrawImage(bmp, New Rectangle(0, 0, width, height), 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel)
                    gr.DrawImage(bmp, 0, 0, width, height);
                    gr.Dispose();
                }
                bmp.Dispose();
                bmp = MiniaturaBmp;
            }
            else
            {
                Bitmap b = (Bitmap) bmp.Clone();
                bmp.Dispose();
                bmp = b;
            }
        
        }