I have got the picture that has got a text in it. I have already converted that picture into grayscale by using the ColorMatrix.
public Bitmap MakeGrayscale(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, .3开发者_开发知识库f, 0, 0}, // 30% red.
new float[] {.59f, .59f, .59f, 0, 0}, // 59% green.
new float[] {.11f, .11f, .11f, 0, 0}, // 11% blue.
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;
}
Now, this is a fairly grayscale (black and white tone). I want to increase the black tone and make darker which I could do with Photoshop. Please let me know how can I achieve this in C#?
Please let me know.
Cheers! :)
One way is the generally enforce the pixels to be darker, try iterating over all pixels (Color objects) in the Bitmap, and replace them with new colors which are darker by a percentage This snippet might help
/// <summary>
/// Darkens the immage, giving a number greater then one will not brighten the image correctly
/// </summary>
/// <param name="bmp">The bitmap to darken</param>
/// <param name="multiplier">The multiplier, should be less then oen to darker the picture</param>
static void DarkenImage(Bitmap bmp, double multiplier)
{
for (int i = 0; i < bmp.Width; i++)
{
// Iterates over all the pixels
for (int j = 0; j < bmp.Height; j++)
{
// Gets the current pixel
var currentPixel = bmp.GetPixel(i, j);
// Assigns each value the multiply, or the max value 255
var newPixel = Color.FromArgb(
Math.Min((byte)255, (byte)(currentPixel.R * multiplier)),
Math.Min((byte)255, (byte)(currentPixel.G * multiplier)),
Math.Min((byte)255, (byte)(currentPixel.B * multiplier))
);
// Sets the pixel
bmp.SetPixel(i, j, newPixel);
}
}
}
精彩评论