Recently, I developed a program that reads imdb.com web page for a specific movie and downloads movie info and images. Then, it merges the thumbnails images into one image file.
Firstly, I write the main code, that downloads the image files and merges them and save the merged image to system.
Note 1: In the code, arr variable is an ArrayList holds the picture urls.
Note 2: Image class is in “System.Drawing”
Image[] images = new Image[arr.Length];
for (int k = 0; k < arr.Length; k++){
images[k] = Utils.DownloadImage(arr[k]);
}
Image mergedImage = Utils.MergeImages(images);
if (mergedImage != null)
{
mergedImage.Save(fileFolder + "\\" + movieTitle + " Thumbnails.jpg");
}
Here is inside of DownloadImage function:
/// <summary>
/// Function to download Image from website
/// </summary>
/// <param name="_URL">URL address to download image</param>
/// <returns>Image</returns>
public static Image DownloadImage(string _URL)
{
Image _tmpImage = null;
try
{
// Open a connection
System.Net.HttpWebRequest _HttpWebRequest = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(_URL);
_HttpWebRequest.AllowWriteStreamBuffering = true;
// set timeout for 20 seconds (Optional)
_HttpWebRequest.Timeout = 20000;
// Request response:
System.Net.WebResponse _WebResponse = _HttpWebRequest.GetResponse();
// Open data stream:
System.IO.Stream _WebStream = _WebResponse.GetResponseStream();
// convert webstream to image
_tmpImage = Image.FromStream(_WebStream);
// Cleanup
_WebResponse.Close();
}
catch (Exception _Exception)
{
// Error
Console.WriteLine("Exception caught in process: {0}", _Exception.ToString());
return null;
}
return _tmpImage;
}
Here is inside of MergeImages function:
/// <summary>
/// Merges Images into 1 Image.
/// </summary>
/// <param name="images">The Images you want merge</param>
/// <returns>An Image of all images</returns>
public static Image MergeImages(Image[] images)
{
if (images == null || images.Length <= 0)
{
return null;
}
Int32 imageWSize = 0;
Int32 imageHSize = 0;
for(int i=0;i<images.Length;i++)
{
if (images[i].Width > imageWSize)
imageWSize = images[i].Width;
if (images[i].Height > imageHSize)
imageHSize = images[i].Height;
}
Int32 width = 0;
Int32 height = 0;
int picsInOneLine = 10;
if (images.Length >= picsInOneLine)
{
width = picsInOneLine * imageWSize;
decimal d = (images.Length + picsInOneLine) / picsInOneLine;
height = (int)Math.Round(d) * imageHSize;
}else{
width = images.Length * imageWSize;
height = imageHSize;
}
Bitmap bitmap = new Bitmap(width, height);
int hhh = -1;
int www = 0;
for(int i=0; i<images.Length; i++)
{
Bitmap image = new Bitmap(images[i]);
if (i % picsInOneLine == 0)
{
hhh++;
www = 0;
}
//Get All of the x Pixels
for (int w = 0; w < imageWSize; w++)
{
//Get All of the Y Pixels
for (int h = 0; h < imageHSize; h++)
{
//Set the Cooresponding Pixel
int ww = w + (www * imageWSize);
int hh = h + (hhh * imageHSize);
bitmap.SetPixel(ww, hh, image.GetPixel(w, h));
}
}
www++;
}
//Return the new Bitmap
return bitmap;
}
Advertisement
[...] C#.Net Download and Merge Images into One Bitmap Image В« Akdora's Blog Apr 5, 2011 … Net Download and Merge Images into One Bitmap Image April 5, 2011. Filed under: Visual C#. … [...]