Funzione "ScriviJPG400px".
Scrive un file JPEG.
private bool ScriviJPG400px(string strSorgente, string strDestinazione, bool b)
{
// Scrittura del file JPG finale
double scaleFactor;
double picH; // Alt. Picture Box
double picW; // Largh. PictureBox
double imgH; // Alt. Immagine
double imgW; // Largh. Immagine
int imgFinalH; // Alt. Immagine Scalata
int imgFinalW; // Largh. Immagine Scalata
double rapportoDimensioni;
bool isBalanced = true;
Bitmap bmp2;
//Dimensioni dell'immagine in pixel
//N.B.: picImage e' un oggetto immagine, qui non usato
// Default
picH = 400; //picImage.Height
picW = 400; //picImage.Width
if (b == false)
{
picH = 50;
picW = 50;
}
try
{
//Bitmap dal File Trovato su Disco
Bitmap bmp = new Bitmap(strSorgente);
pictureBox1.Image = bmp;
pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
pictureBox1.Refresh();
imgH = bmp.Height;
imgW = bmp.Width;
//Il fattore di scala sara' dato dalla frazione che ha
//per numeratore il max fra picH e picW
//e per dividendo il max fra imgH e imgW
//La bitmap da visualizzare
scaleFactor = System.Math.Max(picH, picW) / System.Math.Max(imgH, imgW);
//Le immagini che hanno dimensioni inferiori alla max dimensione (400 px o 50 px)
//rimangono invariate
if (scaleFactor > 1) scaleFactor = 1;
imgFinalH = (int)(imgH * scaleFactor);
imgFinalW = (int)(imgW * scaleFactor);
// Analisi rapporto fra dimensioni:
rapportoDimensioni = System.Math.Min(imgH, imgW) / System.Math.Max(imgH, imgW) * 100;
isBalanced = true;
/*
if (rapportoDimensioni < 50) isBalanced = false;
if (!isBalanced)
{
if (imgFinalH >= imgFinalW)
{
bmp2 = new Bitmap(imgFinalW + imgFinalH / 2, imgFinalH);
}
else
{
bmp2 = new Bitmap(imgFinalW, imgFinalH + imgFinalW / 2);
}
}
else
{
bmp2 = new Bitmap(imgFinalW, imgFinalH);
}
*/
// rapportoDimensioni si legge come percentuale del valore max per ottenere il valore min.
// Valore 50 => una delle due dimensioni e' la meta' dell'altra
// Valore 70 => la dimensione piu' piccola e' il 70% di quella piu' grande.
// Valore 30 => la dimensione piu' piccola e' il 30% di quella piu' grande, sbilanciata.
// Per un valore inferiore a 50 si intende fare dei bordi bianchi all'immagine nella parte piu' piccola.
// La misura di questi bordi bianchi deve diventare tale da avere un rapporto di almeno 50.
bmp2 = new Bitmap(400, 400);
bmp2.SetResolution(96, 96);
Graphics g = Graphics.FromImage(bmp2);
g.Clear(Color.White);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
if (!isBalanced)
{
// Scrivo l'immagine e la centro rispetto alla dimensione modificata.
if (imgFinalH >= imgFinalW)
{
g.DrawImage(bmp, /* x */ bmp2.Width / 2 - imgFinalW / 2, /* y */ 0, bmp2.Width - bmp2.Height / 2, bmp2.Height);
//g.DrawImage(bmp, 0, 0, bmp2.Width - bmp2.Height / 2, bmp2.Height); // OK, allineato a SX
}
else
{
g.DrawImage(bmp, 0, bmp2.Height / 2 - imgFinalH / 2, bmp2.Width, bmp2.Height - bmp2.Height / 2);
//g.DrawImage(bmp, 0, 0, bmp2.Width, bmp2.Height - bmp2.Width / 2); // OK allineato a SX
}
}
else
{
// Non devo fare nulla
//g.DrawImage(bmp, 0, 0, bmp2.Width, bmp2.Height); // ISTRUZIONE ORIGINALE
//g.DrawImage(bmp, new Point(0,0)); // OK, allineamento in alto a sx
// g.DrawImage(bmp, 200 - bmp2.Width / 2, 200 - bmp2.Height / 2, imgFinalW, imgFinalH); // OK, Allineamento a sx
g.DrawImage(bmp, 200 - imgFinalW / 2, 200 - imgFinalH / 2, imgFinalW, imgFinalH); // OK, Immagine centrata
}
//SCRITTURA DEL FILE JPG
bmp2.Save(strDestinazione, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (Exception eX)
{
//picImage.Image = null;
RTBFilesTrovati.AppendText(eX.Message + "\n");
pictureBox1.Image = null;
return false;
}
pictureBox1.Image = null;
return true;
}
}