Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 27

Discussione: Modifica ad img

  1. #11
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    invio la classe a pezzi perchè non è possibile in un solo post
    Pietro

  2. #12
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    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;
                }
            
            }
    Pietro

  3. #13
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    2° pezzo
    codice:
            public static Bitmap ImgResize(string immagineInput, int width, int height, System.Drawing.Drawing2D.InterpolationMode interpolazione, bool ingrandisciPerAdattare)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, width, height, interpolazione, ingrandisciPerAdattare);
                return bmp;
            }
            
            
            
            /*----------------------------------------------------------------------------------------
             * dimMax è la dimensione a cui si vuole arrivare, larghezza o altezza
             * a seconda che l'immagine sia orizzontale o verticale.
             * 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 dimMax, System.Drawing.Drawing2D.InterpolationMode interpolazione, bool ingrandisciPerAdattare)
            {
                int w = 0, h = 0;
                w = bmp.Width;
                h = bmp.Height;
    
                if (w >= h)
                    ImgResize(ref bmp, dimMax, -1, interpolazione, ingrandisciPerAdattare);
                else
                    ImgResize(ref bmp, -1, dimMax, interpolazione, ingrandisciPerAdattare);
                
    
            }
    
            public static Bitmap ImgResize(string immagineInput, int dimMax, System.Drawing.Drawing2D.InterpolationMode interpolazione, bool ingrandisciPerAdattare)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, dimMax, interpolazione,ingrandisciPerAdattare);
                return bmp;
            }
            public static void ImgResize(ref Bitmap bmp, int dimMax, bool quality)
            {
                if( quality )
                    ImgResize(ref bmp, dimMax, System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic, false);
                else
                    ImgResize(ref bmp, dimMax, System.Drawing.Drawing2D.InterpolationMode.Invalid, false);
    
            }
    
            public static Bitmap ImgResize(string immagineInput, int dimMax, bool quality)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, dimMax, quality);
                return bmp;
            }
    
            public static void ImgResize(ref Bitmap bmp, int dimMax)
            {
                ImgResize(ref bmp, dimMax, true);
            }
    
            public static Bitmap ImgResize(string immagineInput, int dimMax)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, dimMax, true);
                return bmp;
            }
            
            
    
    
    
            /*'=======================================================================================
            '/*---------------------------------------------------------------------------------------
            ' * immagineInput    percorso immagine da disco
            ' * width, height    dimensione immagine finale. Se <=0 viene usato l'originale
            ' *                  se è valorizzata solo una dimensione, l'altra viene ricavata in proporzione
            ' *                  se sono specificate tutte e due, viene deformata
            ' * immagineOutput   percorso assoluto del file dove viene salvata l'immagine
            ' * compressione     se = -1 viene usata la compressione predefinita
            '----------------------------------------------------------------------------------------*/
            public static void ImgResizeAndSaveToFile(string immagineInput, int width, int height, System.Drawing.Drawing2D.InterpolationMode interpolazione, bool ingrandisciPerAdattare, string immagineOutput, FormatoOutput formatoOutput, int compressione)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, width, height, interpolazione, ingrandisciPerAdattare);
                ImgSaveToFile(bmp, immagineOutput, formatoOutput, compressione);
                bmp.Dispose();
            }
    
            /*---------------------------------------------------------------------------------------
            ' * immagineInput    percorso immagine da disco
            ' * width, height    dimensione immagine finale. Se <=0 viene usato l'originale
            ' *                  se è valorizzata solo una dimensione, l'altra viene ricavata in proporzione
            ' *                  se sono specificate tutte e due, viene deformata
            ' * 
            ' * compressione     se = -1 viene usata la compressione predefinita
            '----------------------------------------------------------------------------------------*/
            public static void ImgResizeAndSaveToResponseOutputStream(string immagineInput, int width, int height, System.Drawing.Drawing2D.InterpolationMode interpolazione, bool ingrandisciPerAdattare, FormatoOutput formatoOutput, int compressione)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, width, height, interpolazione, ingrandisciPerAdattare);
                ImgSaveToResponseOutputStream(bmp, formatoOutput, compressione);
                bmp.Dispose();
            }
    
    
            //'scelta qualità nel ridimensionamento e formato di uscita
            public static void ImgResizeAndSaveToFile(string immagineInput, int dimMax, bool quality, string immagineOutput, FormatoOutput formatoOutput)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, dimMax, quality);
                int compressione;
                if( quality ) compressione = 100; else compressione = -1;
                ImgSaveToFile(bmp, immagineOutput, formatoOutput, compressione);
                bmp.Dispose();
            }
    
            //'scelta qualità nel ridimensionamento e formato di uscita
            public static void ImgResizeAndSaveToResponseOutputStream(string immagineInput, int dimMax, bool quality, FormatoOutput formatoOutput)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, dimMax, quality);
                int compressione;
                if( quality ) compressione = 100; else compressione = -1;
                ImgSaveToResponseOutputStream(bmp, formatoOutput, compressione);
                bmp.Dispose();
            }
    
    
    
            //'scelta qualità nel ridimensionamento. Immagine di uscita tipo jpg predefinito
            public static void ImgResizeAndSaveToFile(string immagineInput, int dimMax, bool quality, string immagineOutput)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, dimMax, quality);
                int compressione;
                if( quality ) compressione = 100; else compressione = -1;
                ImgSaveToFile(bmp, immagineOutput, FormatoOutput.jpg, compressione);
                bmp.Dispose();
            }
    
            //'scelta qualità nel ridimensionamento. Immagine di uscita tipo jpg predefinito
            public static void ImgResizeAndSaveToResponseOutputStream(string immagineInput, int dimMax, bool quality)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, dimMax, quality);
                int compressione;
                if( quality ) compressione = 100; else compressione = -1;
                ImgSaveToResponseOutputStream(bmp, FormatoOutput.jpg, compressione);
                bmp.Dispose();
            }
    
    
    
            //'alta qualità predefinita nel ridimensionamento. L'uscita è jpg con compressione predefinita
            public static void ImgResizeAndSaveToFile(string immagineInput, int dimMax, string immagineOutput)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, dimMax, true);
                ImgSaveToFile(bmp, immagineOutput, FormatoOutput.jpg, -1);
                bmp.Dispose();
            }
    
            //'alta qualità predefinita nel ridimensionamento. L'uscita è jpg con compressione predefinita
            public static void ImgResizeAndSaveToResponseOutputStream(string immagineInput, int dimMax)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, dimMax, true);
                ImgSaveToResponseOutputStream(bmp, FormatoOutput.jpg, -1);
                bmp.Dispose();
            }
    
    
            public static void ImgResizeAndSaveToFile(HttpPostedFile immagineInput, int width, int height, System.Drawing.Drawing2D.InterpolationMode interpolazione,bool ingrandisciPerAdattare, string immagineOutput, FormatoOutput formatoOutput, int compressione)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, width, height, interpolazione, ingrandisciPerAdattare);
                ImgSaveToFile(bmp, immagineOutput, formatoOutput, compressione);
                bmp.Dispose();
            }
    
            public static void ImgResizeAndSaveToResponseOutputStream(HttpPostedFile immagineInput, int width, int height, System.Drawing.Drawing2D.InterpolationMode interpolazione, bool ingrandisciPerAdattare, FormatoOutput formatoOutput, int compressione)
            {
                Bitmap bmp = ImgLoad(immagineInput);
                ImgResize(ref bmp, width, height, interpolazione, ingrandisciPerAdattare);
                ImgSaveToResponseOutputStream(bmp, formatoOutput, compressione);
                bmp.Dispose();
            }
    Pietro

  4. #14
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    3° pezzo
    codice:
    
    
            //'=======================================================================================
            
            
            
            
            
            /*--------------------------------------------------------------------------------------
             * permette di fondere due immagini
             * immagineDaModificare è la bitmap principale su cui si deve disegnare l'altra bitmap
             * logo è la bitmpa da disegnare su immagineDaModificare
             * x, y: posizione di disegno di logo
             * makeTransparent permette di rendere trasparente il logo (toglie il colore di sfondo)
             * transparency: 0 = massima trasparenza, 1 = massima opacità di logo
             *              -1, non viene considerato
            ---------------------------------------------------------------------------------------*/
            public static void ImgMerge(Bitmap immagineDaModificare, Bitmap logo, int x, int y, bool makeTransparent, double transparency)
            {
                //creo la superficie di disegno in cui lavorerò
                Graphics gr = Graphics.FromImage(immagineDaModificare);
    
                //imposto lavoro alta qualità
                gr.InterpolationMode = 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;
    
                //se voglio il logo trasparente
                if( makeTransparent )
                    logo.MakeTransparent();
    
                //----------------------------------------------------
                //creo la semitrasparenza solo se il parametro transparency non è negativo
                if( Math.Sign(transparency) != -1 )
                {
                    //crea una matrice 5x5 col valore trasparenza nella posizione (4,4)
                    Single[][] values = { 
                        new Single[] {1, 0, 0, 0, 0},
                        new Single[] {0, 1, 0, 0, 0},
                        new Single[] {0, 0, 1, 0, 0},
                        new Single[] {0, 0, 0, (float)transparency, 0},
                        new Single[] {0, 0, 0, 0, 1}};
    
                    //usa la matrice per inizializzare un oggetto colorMatrix
                    System.Drawing.Imaging.ColorMatrix colMatrix = new System.Drawing.Imaging.ColorMatrix(values);
    
                    //crea un oggetto ImageAttributes ed assegna la matrice colore
                    System.Drawing.Imaging.ImageAttributes imageAttr = new System.Drawing.Imaging.ImageAttributes();
                    imageAttr.SetColorMatrix(colMatrix, System.Drawing.Imaging.ColorMatrixFlag.Default, System.Drawing.Imaging.ColorAdjustType.Bitmap);
    
                    //disegna la bitmap usando la matrice colore
                    gr.DrawImage(logo, new Rectangle(x, y, logo.Width, logo.Height), 0, 0, logo.Width, logo.Height, GraphicsUnit.Pixel, imageAttr);
                }
                else
                {                
                    //disegno il logo nella posizione data
                    gr.DrawImage(logo, x, y);
    
                }
                gr.Dispose();
        
            }
            
            
            
            
            //-------------------------------------------------------------------------
            //questa procedura, data una immagine bmpSource, la ritaglia secondo il
            //rettangolo clip passato
            //-------------------------------------------------------------------------
            public static void ImgClip(ref Bitmap bmpSource, Rectangle clip)
            {
                Bitmap bmp = new Bitmap(clip.Width, clip.Height, bmpSource.PixelFormat);
                bmp.SetResolution(bmpSource.HorizontalResolution, bmpSource.VerticalResolution);
                Graphics gr = Graphics.FromImage(bmp);
                gr.Clear(Color.White);
    
                //'imposto lavoro alta qualità
                gr.InterpolationMode = 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(bmpSource, new Rectangle(0, 0, clip.Width, clip.Height), clip, GraphicsUnit.Pixel);
                gr.Dispose();
                bmpSource.Dispose();
                bmpSource = bmp;
    
            }
    
            public static void ImgClipCenter(ref Bitmap bmp, Rectangle clip, int contenitoreW, int contenitoreH, Color coloreSottofondo)
            {
                //taglio l'immagine
                ImgClip(ref bmp, clip);
    
                //creo il riquadro bianco
                Bitmap bmp1 = new Bitmap(contenitoreW, contenitoreH, bmp.PixelFormat);
                bmp1.SetResolution(bmp.HorizontalResolution, bmp.VerticalResolution);
                Graphics gr = Graphics.FromImage(bmp1);
                gr.Clear(coloreSottofondo);
    
                //imposto lavoro alta qualità
                gr.InterpolationMode = 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((int)((contenitoreW - bmp.Width) / 2), (int)((contenitoreH - bmp.Height) / 2), bmp.Width, bmp.Height), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
    
                bmp.Dispose();
                gr.Dispose();
                bmp = bmp1;
    
            }
    
            public static void ImgClipCenter(ref Bitmap bmp, Rectangle clip, int contenitoreW, int contenitoreH)
            {
                ImgClipCenter(ref bmp, clip, contenitoreW, contenitoreH, Color.White);
            }
    
    
            //----------------------------------------------------------------
            //restituisce una immagine con un bordo di dato spessore e colore
            //----------------------------------------------------------------
            public static void ImgBorder(ref Bitmap bmp, int bordoPixel, Color coloreSottofondo)
            {
                int contenitoreW = bmp.Width + bordoPixel + bordoPixel;
                int contenitoreH = bmp.Height + bordoPixel + bordoPixel;
                Bitmap bmp1 = new Bitmap(contenitoreW, contenitoreH, bmp.PixelFormat);
                bmp1.SetResolution(bmp.HorizontalResolution, bmp.VerticalResolution);
                Graphics gr = Graphics.FromImage(bmp1);
                gr.Clear(coloreSottofondo);
    
                //imposto lavoro alta qualità
                gr.InterpolationMode = 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((int)((contenitoreW - bmp.Width) / 2), (int)((contenitoreH - bmp.Height) / 2), bmp.Width, bmp.Height), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
    
                bmp.Dispose();
                gr.Dispose();
                bmp = bmp1;
    
            }
            public static void ImgBorder(ref Bitmap bmp, int bordoPixel)
            {
                ImgBorder(ref bmp, bordoPixel, Color.White);
            }
    
    
            /*'------------------------------------------------------------------------------------------------------------------------------------
            'dato un contenitore di dimensioni contenitoreW e contenitoreH
            'ridimensiona una immagine adattandola dentro il contenitore
            'se centrato = true, viene centrata, altrimenti viene disegnata nella posizione 0,0
            'l'immagine non viene ingrandita per adattarla
            'la parte eccedente viene colorata con coloreSottofondo
            '------------------------------------------------------------------------------------------------------------------------------------*/
            public static void ImgFit(ref Bitmap bmp, int contenitoreW, int contenitoreH, Color coloreSottofondo, Boolean centrato)
            {
                int maxW = contenitoreW;
                int maxH = contenitoreH;
                int oldW = bmp.Width;
                int oldH = bmp.Height;
                double fattoreW = (double)(maxW) / (double)(oldW);
                double fattoreH = (double)(maxH) / (double)(oldH);
                int newW = 0, newH = 0;
                if (fattoreW >= fattoreH)
                {
                    newW = Convert.ToInt32(oldW * fattoreH);
                    newH = Convert.ToInt32(oldH * fattoreH);
                }
                else
                {
                    newW = Convert.ToInt32(oldW * fattoreW);
                    newH = Convert.ToInt32(oldH * fattoreW);
                }
    
                ImgResize(ref bmp, newW, newH, System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic, false);
    
                //'creo il riquadro
                Bitmap bmp1 = new Bitmap(contenitoreW, contenitoreH, bmp.PixelFormat);
                bmp1.SetResolution(bmp.HorizontalResolution, bmp.VerticalResolution);
                Graphics gr = Graphics.FromImage(bmp1);
                gr.Clear(coloreSottofondo);
    
                //'imposto lavoro alta qualità
                gr.InterpolationMode = 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;
    
                if(centrato)
                    gr.DrawImage(bmp, new Rectangle((int)((contenitoreW - bmp.Width) / 2), (int)((contenitoreH - bmp.Height) / 2), bmp.Width, bmp.Height), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
                else
                    gr.DrawImage(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel);
    
                bmp.Dispose();
                gr.Dispose();
                bmp = bmp1;
    
            }
    
            /*'------------------------------------------------------------------------------------------------------------------------------------
            'dato un contenitore di dimensioni contenitoreW e contenitoreH
            'ridimensiona una immagine centrandola dentro il contenitore
            'l'immagine non viene ingrandita per adattarla
            'la parte eccedente viene colorata con coloreSottofondo
            '------------------------------------------------------------------------------------------------------------------------------------*/
            public static void ImgFit(ref Bitmap bmp, int contenitoreW, int contenitoreH, Color coloreSottofondo)
            {
                ImgFit(ref bmp, contenitoreW, contenitoreH, coloreSottofondo, true);
            }
            public static void ImgFit(ref Bitmap bmp, int contenitoreW, int contenitoreH)
            {
                ImgFit(ref bmp, contenitoreW, contenitoreH, Color.White, true);
            }
    Pietro

  5. #15
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    4° pezzo
    codice:
            //ìììììììììììììììììììììììììììììììììììììììììì
            
            //'---------------------------------------------------------------------------
            //'Scrive del testo in un'immagine e restituisce le dimensioni del testo
            //'se si vuole un testo semitrasparente fare:
            //'Dim sF As SizeF = ImgScriviTesto(bmp, "Prova", New SolidBrush(Color.FromArgb(200, 255, 0, 0)), New Font("Arial", 100, FontStyle.Regular, GraphicsUnit.Point), 10, 100)
            //'--------------------------------------------------------------------------
            public static SizeF ImgWriteText(Bitmap bmp, string testo, Brush colore, Font font, int x, int y)
            {
                Graphics gr = Graphics.FromImage(bmp);
                gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                gr.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                SizeF sf = gr.MeasureString(testo, font);
                gr.DrawString(testo, font, colore, x, y);
                gr.Dispose();
                return sf;
            }
    
            //'------------------------------------------------------------------------------------------
            //'produce una Bitmap contenente un testo
            //'------------------------------------------------------------------------------------------
            public static Bitmap ImgFromText(string testo, Color coloreSottofondo, Brush colore, Font font)
            {
                Bitmap bmp1 = new Bitmap(500, 500);
                Graphics gr1 = Graphics.FromImage(bmp1);
                gr1.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                gr1.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                gr1.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
    
                SizeF size = gr1.MeasureString(testo, font);
                gr1.Dispose();
                bmp1.Dispose();
    
                Bitmap bmp = new Bitmap((int)(Math.Round(size.Width)), (int)(Math.Round(size.Height)), System.Drawing.Imaging.PixelFormat.Format16bppRgb565);
    
                Graphics gr = Graphics.FromImage(bmp);
                gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                gr.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
    
                gr.Clear(coloreSottofondo);
    
                gr.DrawString(testo, font, colore, 0, 0);
    
                gr.Dispose();
    
                return bmp;
    
            }
    
            /*-------------------------------------------------------------------------
             * restituisce le dimensioni del testo da scrivere in una bitmap
             * ----------------------------------------------------------------------*/
            public static SizeF ImgGetSizeFromText(Bitmap bmp, string testo, Font font)
            {
                Graphics gr = Graphics.FromImage(bmp);
                gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                gr.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                SizeF sf = gr.MeasureString(testo, font);
                gr.Dispose();
                return sf;
            }
            
            
            
            /*---------------------------------------------------------------------------------------
             * restituisce una Bitmap riempita da un gradiente lineare
            ----------------------------------------------------------------------------------------*/
            public static Bitmap ImgGradienteLineare(int width, int height, Color coloreSottofondo, Color coloreInizio, Color coloreFine, System.Drawing.Drawing2D.LinearGradientMode linearGradientMode, System.Drawing.Drawing2D.Blend blend)
            {
                Bitmap bmp = null;
                System.Drawing.Drawing2D.LinearGradientBrush gl = null;
                Graphics gr = null;
    
                try
                {
                    bmp = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format16bppRgb565);
                    bmp.SetResolution(72, 72);
    
                    gl = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, width, height), coloreInizio, coloreFine, linearGradientMode);
                    //blend = New System.Drawing.Drawing2D.Blend()
                    //blend.Factors = New Single() {0.0F, 0.5F, 1.0F} 'intensità relativa
                    //blend.Positions = New Single() {0.0F, 0.5F, 1.0F} 'posizioni relative
    
                    if( blend != null ) gl.Blend = blend;
                    gr = Graphics.FromImage(bmp);
                    gr.Clear(coloreSottofondo);
                    gr.FillRectangle(gl, 0, 0, bmp.Width, bmp.Height);
    
                    return bmp;
                }
                catch (Exception ex)
                {
                    return null;
                }
                finally
                {
                    if(gl != null) gl.Dispose();
                    if(gr != null) gr.Dispose();
                }
    
            }
    
            public static Bitmap ImgGradienteLineare(int width, int height, Color coloreSottofondo, Color coloreInizio, Color coloreFine, System.Drawing.Drawing2D.LinearGradientMode linearGradientMode)
            {
                return ImgGradienteLineare(width, height, coloreSottofondo, coloreInizio, coloreFine, linearGradientMode, null);
            }
            
            
            //------------------------------------------------------------------------------------------------------
            //converte una immagine nella scala di grigi
            //------------------------------------------------------------------------------------------------------
            public static void ImgConvertPerceptiveMatrix(System.Drawing.Bitmap bitmap)
            {
                System.Drawing.Rectangle bounds = new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height);
                //Dim matrix As New System.Drawing.Imaging.ColorMatrix()
    
                //matrix(0, 0) = 0.299
                //matrix(0, 1) = 0.299
                //matrix(0, 2) = 0.299
                //matrix(1, 0) = 0.587
                //matrix(1, 1) = 0.587
                //matrix(1, 2) = 0.587
                //matrix(2, 0) = 0.114
                //matrix(2, 1) = 0.114
                //matrix(2, 2) = 0.114
    
                float[][] values = {
                    new float[] {0.299f, 0.299f, 0.299f, 0f, 0f},
                    new float[] {0.587f, 0.587f, 0.587f, 0f, 0f}, 
                    new float[] {0.114f, 0.114f, 0.114f, 0f, 0f}, 
                    new float[] {0, 0, 0, 1, 0}, 
                    new float[] {0, 0, 0, 0, 1}};
    
                //usa la matrice per inizializzare un oggetto colorMatrix
                System.Drawing.Imaging.ColorMatrix matrix = new System.Drawing.Imaging.ColorMatrix(values);
                
                System.Drawing.Imaging.ImageAttributes attributes = new System.Drawing.Imaging.ImageAttributes();
                attributes.SetColorMatrix(matrix);
    
                System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap);
                graphics.DrawImage(bitmap, bounds, 0, 0, bitmap.Width, bitmap.Height, System.Drawing.GraphicsUnit.Pixel, attributes);
    
                graphics.Dispose();
    
            }
            
            
            //------------------------------------------------------------------------------------------------------
            //converte una immagine nel suo negativo
            //------------------------------------------------------------------------------------------------------
            public static void ImgConvertNegativeMatrix(System.Drawing.Bitmap bitmap)
            {
                System.Drawing.Rectangle bounds = new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height);
                //Dim matrix As New System.Drawing.Imaging.ColorMatrix()
    
                //matrix(0, 0) = -1
                //matrix(1, 1) = -1
                //matrix(2, 2) = -1
    
                float[][] values = {
                    new float[] {-1, 0, 0, 0, 0},
                    new float[] {0, -1, 0, 0, 0},
                    new float[] {0, 0, -1, 0, 0},
                    new float[] {0, 0, 0, 1, 0},
                    new float[] {0, 0, 0, 0, 1}};
    
                //usa la matrice per inizializzare un oggetto colorMatrix
                System.Drawing.Imaging.ColorMatrix matrix = new System.Drawing.Imaging.ColorMatrix(values);
    
                System.Drawing.Imaging.ImageAttributes attributes = new System.Drawing.Imaging.ImageAttributes();
                attributes.SetColorMatrix(matrix);
    
                System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap);
                graphics.DrawImage(bitmap, bounds, 0, 0, bitmap.Width, bitmap.Height, System.Drawing.GraphicsUnit.Pixel, attributes);
    
                graphics.Dispose();
    
    
            }
    Pietro

  6. #16
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    5° ultimo pezzo
    codice:
            
            
            
            
            
    
            
            /*--------------------------------------------------------------------------------
             * ruota l'immagine, da 0 a 360 gradi. Per avere lo sfondo trasparente, l'immagine
             * deve essere png ed il colore transparent
             * ------------------------------------------------------------------------------*/
            public static void ImgRotate(ref Bitmap bmp, double angolo, Color coloreSottofondo)
            {
                //converto l'angolo in gradi
                double gradi = 0;
                if( angolo < 0 )
                    angolo = 360 - Math.Abs(angolo);
                if(angolo >= 0 && angolo <= 90)
                    gradi = angolo;
                else if(angolo >= 90 && angolo <= 180)
                    gradi = 180 - angolo;
                else if(angolo >= 180 && angolo <= 270)
                        gradi = angolo - 180;
                else if(angolo >= 270 && angolo <= 360)
                    gradi = 360 - angolo;
                else if(angolo >= -90 && angolo <= 0)
                    gradi = -angolo;
    
                double rotazione = (gradi * Math.PI / 180d);
    
                double h = 0, w = 0;
                h = bmp.Height;
                w = bmp.Width;
    
                int h1 = 0, w1 = 0;
                h1 = (int)(Math.Round(Math.Abs(h * Math.Cos(rotazione)) + Math.Abs(w * Math.Sin(rotazione))));
                w1 = (int)(Math.Round(Math.Abs(h * Math.Sin(rotazione)) + Math.Abs(w * Math.Cos(rotazione))));
    
                float x0 = 0, y0 = 0, x1 = 0, y1 = 0, x2 = 0, y2 = 0;
    
                if(angolo >= 0 && angolo <= 90)
                {
                    x0 = 0;
                    y0 = (float)(Math.Abs(w * Math.Sin(rotazione)));
                
                    //trovo le posizioni di (x1,y1) e (x2,y2)
                    x1 = Convert.ToSingle(w * Math.Cos(rotazione));
                    y1 = Convert.ToSingle(0);
                    x2 = Convert.ToSingle(h * Math.Sin(rotazione));
                    y2 = Convert.ToSingle(h1);
                }
    
                else if(angolo >= 90 && angolo <= 180)
                {
                    x0 = (float)(w * Math.Cos(rotazione));
                    y0 = h1;
    
                    x1 = 0;
                    y1 = (float)(h * Math.Cos(rotazione));
                    x2 = w1;
                    y2 = (float)(w * Math.Sin(rotazione));
                }
    
                else if(angolo >= 180 && angolo <= 270)
                {
                    x0 = w1;
                    y0 = (float)(h * Math.Cos(rotazione));
    
                    x1 = (float)(h * Math.Sin(rotazione));
                    y1 = h1;
                    x2 = (float)(w * Math.Cos(rotazione));
                    y2 = 0;
                }
    
                else if(angolo >= 270 && angolo <= 360)
                {
                    x0 = (float)(h * Math.Sin(rotazione));
                    y0 = 0;
    
                    x1 = w1;
                    y1 = (float)(w * Math.Sin(rotazione));
                    x2 = 0;
                    y2 = (float)(h * Math.Cos(rotazione));
    
                }
    
    
                Bitmap bmp1 = null;
                bmp1 = new Bitmap(w1, h1);
    
                Graphics gr1 = Graphics.FromImage(bmp1);
                gr1.Clear(coloreSottofondo);
    
                //imposto lavoro alta qualità
                gr1.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                gr1.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                gr1.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                gr1.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
    
                //creo la matrice di punti
                PointF[] points = {new PointF(x0, y0), new PointF(x1, y1), new PointF(x2, y2)};
    
                //disegno l'immagine ruotata
                gr1.DrawImage(bmp, points);
    
                gr1.Dispose();
                bmp.Dispose();
    
                bmp = bmp1;
    
            }
    
    
            //'-----------------------------------------------------------------------------------------
            //'serve per produrre un gif con trasparenza
            //'-----------------------------------------------------------------------------------------
            public static MemoryStream MakeTransparentGIF(MemoryStream originalBitMapMemoryStream, Color transparentColor)
            {
                int transparentArgb = transparentColor.ToArgb();
    
                using (Bitmap originalBitmap = new Bitmap(originalBitMapMemoryStream))
                {
                    using (Bitmap newBitmap = new Bitmap(originalBitmap.Width, originalBitmap.Height, originalBitmap.PixelFormat))
                    {
                        System.Drawing.Imaging.ColorPalette originalPalette = originalBitmap.Palette;
                        System.Drawing.Imaging.ColorPalette newPalette = newBitmap.Palette;
    
                        int index = 0;
                        int transparentIndex = -1;
    
                        foreach (Color originalColor in originalPalette.Entries)
                        {
                            newPalette.Entries[index] = Color.FromArgb(255, originalColor);
                            if ((originalColor.ToArgb() == transparentArgb)) transparentIndex = index;
                            index++;
                        }
    
                        if ((transparentIndex == -1)) return originalBitMapMemoryStream;
    
                        newPalette.Entries[transparentIndex] = Color.FromArgb(0, transparentColor);
                        newBitmap.Palette = newPalette;
    
                        Rectangle rect = new Rectangle(0, 0, originalBitmap.Width, originalBitmap.Height);
                        System.Drawing.Imaging.BitmapData originalBitMapData = originalBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, originalBitmap.PixelFormat);
                        System.Drawing.Imaging.BitmapData newBitMapData = newBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.WriteOnly, newBitmap.PixelFormat);
    
                        for (int y = 0; y < originalBitmap.Height; y++)
                        {
                            for (int x = 0; x < originalBitmap.Width; x++)
                            {
                                Byte originalBitMapByte = System.Runtime.InteropServices.Marshal.ReadByte(originalBitMapData.Scan0, originalBitMapData.Stride * y + x);
                                System.Runtime.InteropServices.Marshal.WriteByte(newBitMapData.Scan0, newBitMapData.Stride * y + x, originalBitMapByte);
    
                            }
                        }
    
                        newBitmap.UnlockBits(newBitMapData);
                        originalBitmap.UnlockBits(originalBitMapData);
    
                        MemoryStream m = new MemoryStream();
                        newBitmap.Save(m, System.Drawing.Imaging.ImageFormat.Gif);
                        return m;
    
                    }
                }
    
    
            }
            
            public static void MakeTransparentGIF(ref Bitmap bmp, Color transparentColor)
            {
                MemoryStream ms = new MemoryStream();
    
                try
                {
                    bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                    ms = MakeTransparentGIF(ms, Color.Black);
                    bmp = (Bitmap)(Bitmap.FromStream(ms));
                }
    
                catch (Exception ex) { throw; }
    
    
            }
    
    
    
    
            
            
            
            
            
            
            private static string fileOutput(string file, img.FormatoOutput formatoOutput)
            {
                return Path.Combine(Path.GetDirectoryName(file), Path.GetFileNameWithoutExtension(file)) + "." + formatoOutput.ToString();
            }
    
            
    
        }
    }
    Pietro

  7. #17
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    se la migliori fammelo sapere. ciao
    Pietro

  8. #18
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Grazie Pi!

    Adesso però mi serve una decifrata :P Nel mio caso a me serve la prima parte del punto 3 giusto?
    Il fatto che non trovo differenze dal mio codice occhio croce

  9. #19
    salve ad entrambi.
    Premetto che non ci capisco una mazza ma quello che vorrei è:
    avendo un immagine che avrà come dimensione massima 100px (altezza o larghezza) vorrei creare la stessa con dimensioni 100x100 con sfondo bianco.
    Grazie a tutti che mi aiuteranno
    Marco
    Carpe diem
    Preferisco tentare che rinunziare

  10. #20
    Rispolvero questa discussione.

    Ho necessità di fare il merge di 2 o + immagini, e la funzione imgMerge sarebbe perfetta se mi disegnasse qualcosa...
    Ci entra, non dà errore ma nel browser non si vede una cippa...

    Dove sbaglio???

    Ho provato a mettere la chiamata nella Page_Load e subordinata al Click di un bottone.
    Non so + dove sbattere la testa...
    Il mio mononeurone ormai ha fatto le valigie e m'ha lasciato in completa solitudine...yuuuuhuuuuu, c'è neeessuuuuuunoooooo????...gluglugl...u

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.