содержание
Поверните цветное изображение в черный и белый
Реализовать эффект масляной живописи
добиться эффекта резкости
Принцип реализации: Измените место, где значение цвета пикселя изображения сильно изменяется, место, где значение цвета изменяется незначительно, а изменение невелико, и край изображения, поскольку значение цвета двух соседних пикселей изменяется сильно, поэтому после повышения резкости значение цвета сильно меняется.
Код:
public Image AcuteEffect(PictureBox Pict)
{
int Var_W = Pict.Width;//Получить ширину картинки
int Var_H = Pict.Height;//Получить высоту картинки
Bitmap Var_bmp = new Bitmap(Var_W, Var_H);//Создаем экземпляр класса Bitmap в соответствии с размером изображения
Bitmap Var_SaveBmp = (Bitmap)Pict.Image;//Создаем экземпляр класса Bitmap в соответствии с изображением
int[] Laplacian = {-1, -1, -1, -1, 9, -1, -1, -1, -1 };// лапласовский шаблон
//обходим каждый пиксель изображения
for (int i = 1; i < Var_W - 1; i++)
for (int j = 1; j < Var_H - 1; j++)
{
int tem_r=0, tem_g=0, tem_b=0, tem_index=0;//Определяем переменные
for (int c = -1; c <= 1; c++)
for (int r = -1; r <= 1; r++)
{
Color tem_color = Var_SaveBmp.GetPixel(i + r, j + c);//Получить значение цвета указанного пикселя
tem_r + = tem_color.R * Лапласиан [tem_index];//устанавливаем значения цвета R
tem_g += tem_color.G * Laplacian[tem_index];//Устанавливаем значение цвета G
tem_b += tem_color.B * Laplacian[tem_index];//Установить значение цвета B
tem_index++;
}
tem_r = tem_r > 255 ? 255 : tem_r; //Если значение цвета R больше 255, установите значение цвета R на 255, в противном случае без изменений
tem_r = tem_r
tem_g = tem_g > 255 ? 255 : tem_g; //Если значение цвета G больше 255, установите значение цвета R на 255, в противном случае то же самое
tem_g = tem_g
tem_b = tem_b > 255 ? 255 : tem_b; //Если значение цвета B больше 255, установите значение цвета R на 255, иначе оно не изменится
tem_b = tem_b
Var_bmp.SetPixel(i - 1, j - 1, Color.FromArgb(tem_r, tem_g, tem_b));//Установить цвет указанного пикселя
}
return Var_bmp;
}
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image = AcuteEffect(pictureBox1);
}
Превратить цветное изображение в черно-белое
Принцип: Измените цветное изображение на более мягкое черно-белое изображение методом усреднения в соответствии со значением цвета RGB цветного изображения.
public Image BlackandWhiteEffect(PictureBox Pict)
{
Int Var_H = Pict.Image.Height;//Получить высоту изображения
Int Var_W = Pict.Image.Width;//Получить ширину изображения
Bitmap Var_bmp = new Bitmap(Var_W, Var_H);//Создаем экземпляр класса Bitmap в соответствии с размером изображения
Bitmap Var_SaveBmp = (Bitmap)Pict.Image;//Создаем экземпляр класса Bitmap в соответствии с изображением
// цикл по пикселям изображения
for (int i = 0; i < Var_W; i++)
for (int j = 0; j < Var_H; j++)
{
Color tem_color = Var_SaveBmp.GetPixel(i, j);//Получить значение цвета текущего пикселя
Int tem_r, tem_g, tem_b, tem_Value = 0;//Определяем переменные
tem_r = tem_color.R;//Получить значение цвета R
tem_g = tem_color.G;//Получить значение цвета G
tem_b = tem_color.B;//Получить значение цвета B
tem_Value = ((tem_r + tem_g + tem_b) / 3);//Используем метод усреднения для создания черно-белого изображения
Var_bmp.SetPixel(i, j, Color.FromArgb(tem_Value, tem_Value, tem_Value));//Изменить значение цвета текущего пикселя
}
return Var_bmp;
}
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image = BlackandWhiteEffect(pictureBox1);
}
Реализовать световые эффекты
Принцип реализации: установите круг в центральной точке, указанной на изображении, и осветлите значение цвета каждого пикселя в круге в соответствии с установленным значением яркости, чтобы сформировать эффект ореола.
public Image pp(PictureBox Pict, int x, int y, int R, float better)//R Радиус поверхности сильного засветки, то есть "гало"
{
Bitmap Var_Bmp = new Bitmap(Pict.Image, Pict.Width, Pict.Height);//Создайте экземпляр класса Bitmap в соответствии с изображением
Int tem_w = var_bmp.width; // получить ширину изображения
INT TEM_H = var_bmp.height;// Получить высоту изображения
//Определяем копию класса Bitmap
Bitmap Var_SaveBmp = Var_Bmp.Clone(new RectangleF(0, 0, tem_W, tem_H), System.Drawing.Imaging.PixelFormat.DontCare);
Point Var_Center = new Point(x, y);//Центральная точка ореола
//обходим каждый пиксель изображения
for (int i = tem_W - 1; i >= 1; i--)
{
for (int j = tem_H - 1; j >= 1; j--)
{
float Var_Length = (float)Math.Sqrt(Math.Pow((i - Var_Center.X), 2) + Math.Pow((j - Var_Center.Y), 2));//Устанавливаем диапазон ореола
//Если пиксель находится внутри "ореола"_
if (Var_Length < R)
{
Color Var_Color = Var_SaveBmp.GetPixel(i, j);
int r, g, b;
float Var_Pixel = better * (1.0f - Var_Length/R);//Устанавливаем интенсивность света
r = var_color.r + (int) var_pixel; // установить расширенное значение R
r = Math.Max(0, Math.Min(r, 255));//Если значение R выходит за пределы диапазона значения цвета, устанавливаем значение R
g = Var_Color.G + (int)Var_Pixel;//Устанавливаем расширенное значение G
G = Math.Max(0, Math.Min(g, 255));//Если значение G не находится в диапазоне значения цвета, установите значение G
b = Var_Color.B + (int)Var_Pixel;//Установить расширенное значение B
b = Math.Max(0, Math.Min(b, 255));//Если значение B не находится в диапазоне значений цвета, устанавливаем значение B
Var_SaveBmp.SetPixel(i, j, Color.FromArgb(255, r, g, b));//Записываем значение выделенного пикселя обратно в растровое изображение
}
}
}
return Var_SaveBmp;
}
private void button1_Click(object sender, EventArgs e)
{
pictureBox1.Image = pp(pictureBox1,49,47,40,100F);
}
Реализовать эффект масляной живописи
Принцип реализации: Произвольная обработка пикселей в определенном диапазоне цветов изображения позволяет получить эффект масляной живописи.
Код:
public partial class Frm_Main : Form
{
public Frm_Main()
{
InitializeComponent();
}
private Bitmap SourceBitmap;
private Bitmap MyBitmap;
private void button2_Click(object sender, EventArgs e)
{
//Открываем файл изображения
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Файл изображения (JPeg, Gif, Bmp и т. д.)|*.jpg;*.jpeg;*.gif;*.bmp;*.tif;*.tiff;*.png|Файл изображения JPEG( *.jpg;*.jpeg)|*.jpg;*.jpeg |Файл изображения GIF(*.gif)|*.gif |Файл изображения BMP(*.bmp)|*.bmp|Файл изображения Tiff(*.tif) ;*.tiff)|*.tif;*.tiff|Файлы изображений Png (*.png)| *.png|все файлы (*.*)|*.*";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
// получаем изображение исходного размера
SourceBitmap = new Bitmap(openFileDialog.FileName);
//Получить масштабированное изображение
MyBitmap = new Bitmap(SourceBitmap, this.pictureBox1.Width, this.pictureBox1.Height);
this.pictureBox1.Image = MyBitmap;
}
}
private void button1_Click(object sender, EventArgs e)
{
//Показать изображение с эффектом масляной живописи
Graphics g = this.panel1.CreateGraphics();
//Получить размер изображения
int width = MyBitmap.Width;
int height = MyBitmap.Height;
RectangleF rect = new RectangleF(0, 0, width, height);
Bitmap img = MyBitmap.Clone(rect, System.Drawing.Imaging.PixelFormat.DontCare);
// Генерируем последовательность случайных чисел
Random rnd = new Random();
// Берем разные значения, чтобы определить разные степени эффектов масляной живописи
int iModel = 2;
int i = width - iModel;
while (i > 1)
{
int j = height - iModel;
while (j > 1)
{
int iPos = rnd.Next(100000) % iModel;
//Установите значение RGB точки в любую точку в пределах ближайшей точки iModel
Color color = img.GetPixel(i + iPos, j + iPos);
img.SetPixel(i, j, color);
j = j - 1;
}
i = i - 1;
}
// перерисовываем изображение
g.Clear(Color.White);
g.DrawImage(img, new Rectangle(0, 0, width, height));
}
}