المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : combining 2 codes



C# Programming
01-14-2010, 02:26 PM
hello everybody i have one csharp .net code that selects multiple images.

string[] extensions = new string[] {"jpg", "gif", "bmp", /*...*/};
foreach (string extension in extensions)
{
FileInfo[] FileJpg = FileDirectory.GetFiles(string.Format("*.{0}", extension));
foreach (FileInfo File in FileJpg)
{
ImageList.Add(File.Name, File.FullName);
checkedListBox1.Items.Add(File.Name);
}
}


and a second code that performs rotation on one image.

namespace ImageRotation
{
public partial class Form1 : Form
{
private Image loadedImage;

public Form1()
{
InitializeComponent();
}

private Image RotateImage(Image inputImg, double degreeAngle)
{
//Corners of the image
PointF[] rotationPoints = { new PointF(0, 0),
new PointF(inputImg.Width, 0),
new PointF(0, inputImg.Height),
new PointF(inputImg.Width, inputImg.Height)};

//Rotate the corners
PointMath.RotatePoints(rotationPoints, new PointF(inputImg.Width / 2.0f, inputImg.Height / 2.0f), degreeAngle);

//Get the new bounds given from the rotation of the corners
//(avoid clipping of the image)
Rectangle bounds = PointMath.GetBounds(rotationPoints);

//An empy bitmap to draw the rotated image
Bitmap rotatedBitmap = new Bitmap(bounds.Width, bounds.Height);

using (Graphics g = Graphics.FromImage(rotatedBitmap))
{
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;

//Transformation matrix
Matrix m = new Matrix();
m.RotateAt((float)degreeAngle, new PointF(inputImg.Width / 2.0f, inputImg.Height / 2.0f));
m.Translate(-bounds.Left, -bounds.Top, MatrixOrder.Append); //shift to compensate for the rotation

g.Transform = m;
g.DrawImage(inputImg, 0, 0);
}
return (Image)rotatedBitmap;
}

private void trackBar1_Scroll(object sender, EventArgs e)
{
if (loadedImage != null)
pictureBox1.Image = RotateImage(loadedImage, (double)tRotation.Value);
pictureBox1.*******();
}

private void btnLoad_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
try
{
loadedImage = Image.FromFile(openFileDialog1.FileName);
pictureBox1.Image = loadedImage;

//Reset rotation value
tRotation.Value = 0;
}
catch (Exception)
{
MessageBox.Show("Image invalid.");
}
}
}

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
System.Diagnostics.Process.Start("http://www.vcskicks.com/");
}
}

public static class PointMath
{
private static double DegreeToRadian(double angle)
{
return Math.PI * angle / 180.0;
}

public static PointF RotatePoint(PointF pnt, double degreeAngle)
{
return RotatePoint(pnt, new PointF(0, 0), degreeAngle);
}

public static PointF RotatePoint(PointF pnt, PointF origin, double degreeAngle)
{
double radAngle = DegreeToRadian(degreeAngle);

PointF newPoint = new PointF();

double deltaX = pnt.X - origin.X;
double deltaY = pnt.Y - origin.Y;

newPoint.X = (float)(origin.X + (Math.Cos(radAngle) * deltaX - Math.Sin(radAngle) * deltaY));
newPoint.Y = (float)(origin.Y + (Math.Sin(radAngle) * deltaX + Math.Cos(radAngle) * deltaY));

return newPoint;
}

public static void RotatePoints(PointF[] pnts, double degreeAngle)
{
for (int i = 0; i < pnts.Length; i++)
{
pnts[i] = RotatePoint(pnts[i], degreeAngle);
}
}

public static void RotatePoints(PointF[] pnts, PointF origin, double degreeAngle)
{
for (int i = 0; i < pnts.Length; i++)
{
pnts[i] = RotatePoint(pnts[i], origin, degreeAngle);
}
}

public static Rectangle GetBounds(PointF[] pnts)
{
RectangleF boundsF = GetBoundsF(pnts);
return new Rectangle((int)Math.Round(boundsF.Left),
(int)Math.Round(boundsF.Top),
(int)Math.Round(boundsF.Width),
(int)Math.Round(boundsF.Height));
}

public static RectangleF GetBoundsF(PointF[] pnts)
{
float left = pnts[0].X;
float right = pnts[0].X;
float top = pnts[0].Y;
float bottom = pnts[0].Y;

for (int i = 1; i < pnts.Length; i++)
{
if (pnts[i].X < left)
left = pnts[i].X;
else if (pnts[i].X > right)
right = pnts[i].X;

if (pnts[i].Y < top)
top = pnts[i].Y;
else if (pnts[i].Y > bottom)
bottom = pnts[i].Y;
}

return new RectangleF(left,
top,
(float)Math.Abs(right - left),
(float)Math.Abs(bottom - top));
}
}
}



can somebody help me to work this code for mutiple images that i have selected.Thanking u in advance.