Recently i have to convert colored bitmap/jpeg images to gray scale in my project. I found many solutions on Google but found one useful. This tutorial will help you browse images from directory and convert them to gray scale one by one.
First of all create a solution and windows form project in visual studio.
Then drag two picture boxes from toolbox on the left on to the form and two buttons also.
Name picture boxes pctColoredImage and pctGrayScale. Also the two buttons btnNext and btnPrevious and show text on them Next and Previous respectively.
Double click on each picture boxes and buttons to create their events.
Now create
List<string> FilesFromFolder = null; a global variable and in constructor initialize it like this
FilesFromFolder = new List<string>();
Now in form load add files from the folder to the list just initialized in the constructor.
string[] fileEntries = Directory.GetFiles("data/")
foreach (string fileName in fileEntries)
{
// add directory files to list
FilesFromFolder.Add(fileName);
}
Declare int fileIndex = 0; as global variable to track count of index.
Now in event of onClick of btnNext write this code
if (FilesFromFolder.Count == fileIndex)
fileIndex = 0;
this.Text = FilesFromFolder[fileIndex];
CalculateACCR(fileIndex);
pctBoxMain.Image = new Bitmap(FilesFromFolder[fileIndex++]);
pctBoxGrayScale.Image = ConvertToGrayscale (new Bitmap(pctBoxMain.Image));
In event of onClick of btnPrevious write this code
if (fileIndex == 0)
fileIndex = FilesFromFolder.Count;
this.Text = FilesFromFolder[(fileIndex) - 1];
CalculateACCR(fileIndex - 1);
pctBoxMain.Image = new Bitmap(FilesFromFolder[(fileIndex) - 1]);
fileIndex--;
pctBoxGrayScale.Image = ConvertToGrayscale(new Bitmap(pctBoxMain.Image));
now to convert images to gray scale us this function
public static Bitmap ConvertToGrayscale (Bitmap original)
{
//create a blank bitmap the same size as original
Bitmap newBitmap = new Bitmap(original.Width, original.Height);
//get a graphics object from the new image
Graphics g = Graphics.FromImage(newBitmap);
//create the grayscale ColorMatrix
ColorMatrix colorMatrix = new ColorMatrix(
new float[][]
{
new float[] {.3f, .3f, .3f, 0, 0},
new float[] {.59f, .59f, .59f, 0, 0},
new float[] {.11f, .11f, .11f, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}
});
//create some image attributes
ImageAttributes attributes = new ImageAttributes();
//set the color matrix attribute
attributes.SetColorMatrix(colorMatrix);
//draw the original image on the new image
//using the grayscale color matrix
g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height),
0, 0, original.Width, original.Height, GraphicsUnit.Pixel, attributes);
//dispose the Graphics object
g.Dispose();
return newBitmap;
}
Note: you may have to adjust slightly the index for next and previous image.
First of all create a solution and windows form project in visual studio.
Then drag two picture boxes from toolbox on the left on to the form and two buttons also.
Name picture boxes pctColoredImage and pctGrayScale. Also the two buttons btnNext and btnPrevious and show text on them Next and Previous respectively.
Double click on each picture boxes and buttons to create their events.
Now create
List<string> FilesFromFolder = null; a global variable and in constructor initialize it like this
FilesFromFolder = new List<string>();
Now in form load add files from the folder to the list just initialized in the constructor.
string[] fileEntries = Directory.GetFiles("data/")
foreach (string fileName in fileEntries)
{
// add directory files to list
FilesFromFolder.Add(fileName);
}
Declare int fileIndex = 0; as global variable to track count of index.
Now in event of onClick of btnNext write this code
if (FilesFromFolder.Count == fileIndex)
fileIndex = 0;
this.Text = FilesFromFolder[fileIndex];
CalculateACCR(fileIndex);
pctBoxMain.Image = new Bitmap(FilesFromFolder[fileIndex++]);
pctBoxGrayScale.Image = ConvertToGrayscale (new Bitmap(pctBoxMain.Image));
In event of onClick of btnPrevious write this code
if (fileIndex == 0)
fileIndex = FilesFromFolder.Count;
this.Text = FilesFromFolder[(fileIndex) - 1];
CalculateACCR(fileIndex - 1);
pctBoxMain.Image = new Bitmap(FilesFromFolder[(fileIndex) - 1]);
fileIndex--;
pctBoxGrayScale.Image = ConvertToGrayscale(new Bitmap(pctBoxMain.Image));
now to convert images to gray scale us this function
public static Bitmap ConvertToGrayscale (Bitmap original)
{
//create a blank bitmap the same size as original
Bitmap newBitmap = new Bitmap(original.Width, original.Height);
//get a graphics object from the new image
Graphics g = Graphics.FromImage(newBitmap);
//create the grayscale ColorMatrix
ColorMatrix colorMatrix = new ColorMatrix(
new float[][]
{
new float[] {.3f, .3f, .3f, 0, 0},
new float[] {.59f, .59f, .59f, 0, 0},
new float[] {.11f, .11f, .11f, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, 0, 1}
});
//create some image attributes
ImageAttributes attributes = new ImageAttributes();
//set the color matrix attribute
attributes.SetColorMatrix(colorMatrix);
//draw the original image on the new image
//using the grayscale color matrix
g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height),
0, 0, original.Width, original.Height, GraphicsUnit.Pixel, attributes);
//dispose the Graphics object
g.Dispose();
return newBitmap;
}
Note: you may have to adjust slightly the index for next and previous image.
0 comments:
Post a Comment