invio la classe a pezzi perchè non è possibile in un solo post
invio la classe a pezzi perchè non è possibile in un solo post
Pietro
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
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
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
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
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
se la migliori fammelo sapere. ciao
![]()
Pietro
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![]()
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
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