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