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();


        }