содержание
Добейтесь эффекта вертикальных жалюзи.
Чередование изображений по горизонтали
Реализуйте эффект строительного блока
Изображение дисплея с эффектом смягчения
Добейтесь эффекта вертикальных жалюзи.
Принцип: Разделите изображение на несколько областей, каждая область постепенно отображается в прогрессивном порядке, а эффект подобен щелканию жалюзи. Методы GetRixel и SetPixel класса Bitmap в основном используются для получения и установки цвета указанного пикселя изображения, а затем используют метод Refresh для обновления фона формы.
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "*.jpg,*.jpeg,*.bmp|*.jpg;*.jpeg;*.bmp";//Устанавливаем тип файла
openFileDialog1.ShowDialog();//Открыть диалоговое окно файла
myImage = System.Drawing.Image.FromFile(openFileDialog1.FileName);//Создаем экземпляр класса Image в соответствии с путем к файлу
This.BackgroundImage = myImage;//Показать открытое изображение
}
private void button2_Click(object sender, EventArgs e)
{
try
{
Bitmap myBitmap = (Bitmap)this.BackgroundImage.Clone();//Создаем экземпляр класса Bitmap с копией фона формы
int intWidth = myBitmap.Width;//Записываем ширину картинки
int intHeight = myBitmap.Height/20;//Записываем указанную высоту картинки
Graphics myGraphics = this.CreateGraphics();//Создаем класс Graphics формы
myGraphics.Clear(Color.WhiteSmoke);//Очистить фон формы указанным цветом
Point[] myPoint = new Point[30];//Определяем массив
For (int i = 0; i
{
myPoint[i].X = 0;
myPoint[i].Y = i * intHeight;
}
Bitmap bitmap = new Bitmap(myBitmap.Width, myBitmap.Height);//Создание экземпляра класса Bitmap
// Сбросьте цвет пикселя изображения, вызвав метод SetPixel объекта Bitmap для достижения эффекта затвора
for (int m = 0; m < intHeight; m++)
{
for (int n = 0; n < 20; n++)
{
for (int j = 0; j < intWidth; j++)
{
bitmap.SetPixel(myPoint[n].X + j, myPoint[n].Y + m, myBitmap.GetPixel(myPoint[n].X + j,myPoint[n].Y + m));//Получить текущее значение цвета пикселя
}
}
This.Refresh();//Рисунок недействителен
This.BackgroundImage = bitmap;//Отображение эффекта затвора окна
System.Threading.Thread.Sleep(100);//Поток зависает
}
}
catch { }
}
Чередование изображений по горизонтали
Принцип реализации: Разделите изображение на две части, левую и правую, а затем переместите их из левого и правого направлений в середину формы и, наконец, сформируйте картинку. В основном используются методы GetPixel и SetPixel Bitmap.
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "*.jpg,*.jpeg,*.bmp|*.jpg;*.jpeg;*.bmp";//Устанавливаем тип файла
OpenFileDialog1.ShowDialog();//Диалог открытия файла
Image myImage = System.Drawing.Image.FromFile(openFileDialog1.FileName);//Создаем экземпляр класса Image в соответствии с путем к файлу
myBitmap = new Bitmap(myImage);//Создаем экземпляр класса Bitmap
This.BackgroundImage = myBitmap;//Показать открытое изображение
}
private void button2_Click(object sender, EventArgs e)
{
try
{
int intWidth = this.BackgroundImage.Width;//Получить ширину фонового изображения
int intHeight = this.BackgroundImage.Height;//Получить высоту фонового изображения
Graphics myGraphics = this.CreateGraphics();//Создаем класс Graphics формы
MyGraphics.Clear(Color.WhiteSmoke);//Очистить указанным цветом
Bitmap bitmap = new Bitmap(intWidth, intHeight); //Создаем экземпляр класса Bitmap
int i = 0;
// Отобразите изображение, вызвав метод SetPixel объекта Bitmap для достижения эффекта горизонтальной чересстрочной развертки
while (i <= intWidth / 2)
{
for (int m = 0; m <= intHeight - 1; m++)
{
bitmap.SetPixel(i, m, myBitmap.GetPixel(i, m));//Установить значение цвета текущего пикселя
}
for (int n = 0; n <= intHeight - 1; n++)
{
bitmap.SetPixel(intWidth - i - 1, n, myBitmap.GetPixel(intWidth - i - 1, n));//Установить значение цвета текущего пикселя
}
i++;
//рабочее пространство недействительно
This.BackgroundImage = bitmap;//Отображение изображения с чередованием по горизонтали
System.Threading.Thread.Sleep(10);//Поток зависает
}
}
catch { }
}
Отображение эффекта текстуры
Принцип реализации: использовать метод LockBits объекта Bitmap для блокировки изображения в памяти, затем получить адрес данных первого пикселя в изображении через свойство Scan0 объекта BitmapData, и, наконец, использовать метод Copy объекта System Класс .Runtime.InteropServices.Marshal as Укажите пиксели изображения для поиска смерти и используйте преобразованное изображение в качестве нового фона формы.
Код:
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "*.jpg,*.jpeg,*.bmp|*.jpg;*.jpeg;*.bmp";//Установить тип файла
openFileDialog1.ShowDialog();//Открыть диалоговое окно файла
Image myImage = System.Drawing.Image.FromFile(openFileDialog1.FileName);//Создаем экземпляр класса Image в соответствии с путем к файлу
myBitmap = new Bitmap(myImage);//Создаем экземпляр класса Bitmap
This.BackgroundImage = myBitmap;//Показать открытое изображение
}
private void button2_Click(object sender, EventArgs e)
{
try
{
Image myImage = System.Drawing.Image.FromFile(openFileDialog1.FileName);//Создаем экземпляр класса Image
myBitmap = new Bitmap(myImage);//Создаем экземпляр класса Bitmap
Rectangle rect = new Rectangle(0, 0, myBitmap.Width, myBitmap.Height);//Создаем экземпляр класса Rectangle
System.Drawing.Imaging.BitmapData bmpData = myBitmap.LockBits(rect,
System.Drawing.Imaging.ImageLockMode.ReadWrite, myBitmap.PixelFormat); // Блокируем указанное изображение в памяти
IntPtr ptr = bmpData.Scan0;//Получить адрес данных первого пикселя в изображении
Int bytes = myBitmap.Width * myBitmap.Height * 3;//Устанавливаем размер
byte[] rgbValues = new byte[bytes];//Создаем экземпляр массива байтов
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);//Назначаем массив rgbValues, используя значение RGB
for (int counter = 0; counter
rgbValues[counter] = 255;
System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, ptr, bytes);//Используем значения RGB для окрашивания пикселей изображения
MyBitmap.UnlockBits(bmpData);//Разблокировать изображение из памяти
This.BackgroundImage = myBitmap;//Показать картинку после установки
}
catch { }
}
добиться рельефного эффекта
Принцип реализации: получить цвет каждого пикселя с помощью метода GetPixel объекта Bitmap, затем использовать свойство RGB объекта Color для получения значения элемента RGB каждого пикселя и использовать эти значения для вычитания значения соседнего пикселя плюс 128 и, наконец, используйте метод SetPixel объекта Bitmap, который перекрашивает пиксели растрового изображения.
Код:
public partial class Frm_Main : Form
{
Bitmap myBitmap;
Image myImage;
public Frm_Main()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "*.jpg,*.jpeg,*.bmp|*.jpg;*.jpeg;*.bmp";//Устанавливаем тип файла
openFileDialog1.ShowDialog();//Открыть диалоговое окно файла
myImage = System.Drawing.Image.FromFile(openFileDialog1.FileName);//Создаем экземпляр класса Image в соответствии с путем к файлу
myBitmap = new Bitmap(myImage);//Создаем экземпляр класса Bitmap
This.BackgroundImage = myBitmap;//Показать открытое изображение
}
private void button2_Click(object sender, EventArgs e)
{
try
{
myBitmap = new Bitmap(myImage);//Создаем экземпляр класса Bitmap
// перебираем все пиксели изображения
for (int i = 0; i < myBitmap.Width - 1; i++)
{
for (int j = 0; j < myBitmap.Height - 1; j++)
{
Color Color1 = myBitmap.GetPixel(i, j);//Получить значение цвета текущего пикселя
Color Color2 = myBitmap.GetPixel(i + 1, j + 1);//Получить значение цвета пикселя под диагональной точкой
int red = Math.Abs(Color1.R - Color2.R + 128);//Установить значение цвета R
int green = Math.Abs(Color1.G - Color2.G + 128);//Устанавливаем значение цвета G
int blue = Math.Abs(Color1.B - Color2.B + 128);//Установить значение цвета B
//обработка цвета
Если (красный > 255) красный = 255; //Если значение цвета R больше 255, установите значение цвета R на 255
Если (красный
Если (зеленый > 255) зеленый = 255; //Если значение цвета G больше 255, установите значение цвета R на 255
Если (зеленый
Если (синий > 255) синий = 255; //Если значение цвета B больше 255, установите значение цвета R на 255
If (blue
//Перекрашиваем пиксели изображения, вызывая метод SetPixel объекта Bitmap
myBitmap.SetPixel(i, j, Color.FromArgb(red, green, blue));
}
}
This.BackgroundImage = myBitmap;//Показать обработанное изображение
}
catch { }
}
}
добиться эффекта пленки
Принцип реализации: инвертировать существующее изображение.
Код:
private void button1_Click(object sender, EventArgs e)
{
try
{
int Height = this.pictureBox1.Image.Height;//Получить высоту картинки
int Width = this.pictureBox1.Image.Width;//Получить ширину картинки
Bitmap newbitmap = new Bitmap(Width, Height);//Создаем экземпляр растрового объекта
Bitmap oldbitmap = (Bitmap)this.pictureBox1.Image;//Получить исходное изображение
Пиксель цвета;//Определяем структуру цвета
//обходим каждую позицию изображения
for (int x = 1; x < Width; x++)
{
for (int y = 1; y < Height; y++)
{
Int r, g, b;//Определяем 3 переменные для записи значения R\G\B указанной точки
pixel = oldbitmap.GetPixel(x, y);//Получить значение пикселя указанной точки
r = 255 - pixel.R;//Записываем значение R
G = 255 - пиксель.G;//Запись значения G
B = 255 - пиксель.B;//Запись значения B
Newbitmap.SetPixel(x, y, Color.FromArgb(r, g, b));//Перекрасить указанную точку
}
}
This.pictureBox1.Image = newbitmap;//Показать изображение негативного эффекта
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Информационная подсказка", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
Реализуйте эффект строительного блока
Принцип реализации: сосредоточьтесь на окрашивании каждого пикселя изображения, возьмите значение RGB одного пикселя и возьмите среднее значение.Если среднее значение больше 128, установите его на 255, в противном случае установите на 0.
Код:
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "*.jpg,*.jpeg,*.bmp|*.jpg;*.jpeg;*.bmp";
openFileDialog1.ShowDialog();
Image myImage = System.Drawing.Image.FromFile(openFileDialog1.FileName);
this.BackgroundImage = myImage;
}
private void button2_Click(object sender, EventArgs e)
{
Graphics myGraphics = this.CreateGraphics();//Создаем класс Graphics формы
Bitmap myBitmap = new Bitmap(openFileDialog1.FileName);//Создаем экземпляр класса Bitmap
int myWidth, myHeight, i, j, iAvg, iPixel; // определяем переменные
Color myColor, myNewColor; // Определяем цветовые переменные
RectangleF myRect;
myWidth = myBitmap.Width;//Получить ширину фонового изображения
myHeight = myBitmap.Height;//Получить высоту фонового изображения
myRect = new RectangleF(0, 0, myWidth, myHeight); //Получить площадь картинки
Bitmap bitmap = myBitmap.Clone(myRect, System.Drawing.Imaging.PixelFormat.DontCare);//Создаем экземпляр класса Bitmap
i = 0;
//обходим все пиксели изображения
while (i < myWidth - 1)
{
j = 0;
while (j < myHeight - 1)
{
myColor = bitmap.GetPixel(i, j);//Получить значение цвета текущего пикселя
iAvg = (myColor.R + myColor.G + myColor.B) / 3;//Метод среднего
iPixel = 0;
If (iAvg >= 128) // если значение цвета больше или равно 128
iPixel = 0; // Установите значение 255
else
iPixel = 255;
//Получить цвет каждого пикселя изображения, вызвав метод FromArgb объекта Color
myNewColor = Color.FromArgb(255, iPixel, iPixel, iPixel);
bitmap.SetPixel(i, j, myNewColor);//Установить значение цвета
j = j + 1;
}
i = i + 1;
}
myGraphics.Clear(Color.WhiteSmoke);
bitmap.Save("D:11.bmp");//Очистить указанным цветом
myGraphics.DrawImage(bitmap, new Rectangle(0, 0, myWidth, myHeight));//Рисуем обработанное изображение
}
Изображение дисплея с эффектом смягчения
Принцип реализации: Сравните цвет текущего пикселя и окружающих пикселей, Если разница в цвете большая, переходите к среднему значению, в противном случае берите исходное значение и перекрашивайте изображение.
Код:
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)
{
Bitmap MyBitmap = new Bitmap(openFileDialog.FileName);
this.pictureBox1.Image = MyBitmap;
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
int Height = this.pictureBox1.Image.Height;//Получить высоту изображения
Int Width = this.pictureBox1.Image.Width;//Получить ширину изображения
Bitmap bitmap = new Bitmap(Width, Height);//Создание нового объекта растрового изображения
Bitmap MyBitmap = (Bitmap)this.pictureBox1.Image;//Запись исходного изображения
Пиксель цвета;//Определяем структуру цвета
int[] Gauss ={ 1, 2, 1, 2, 4, 2, 1, 2, 1 };//Определяем значение шаблона Гаусса
// Обход каждой позиции исходного изображения
for (int x = 1; x < Width - 1; x++)
for (int y = 1; y < Height - 1; y++)
{
Int r = 0, g = 0, b = 0;//объявляем 3 переменные для записи значений R/G/B
Int Index = 0;//Объявить переменную для записи позиции
for (int col = -1; col <= 1; col++)
for (int row = -1; row <= 1; row++)
{
pixel = MyBitmap.GetPixel(x + row, y + col);//Получить пиксель указанной точки
r += pixel.R * Gauss[Index];//Запись значения R
G += пиксель.G * Gauss[Index];//Запись значения G
B += пиксель.B * Gauss[Index];//Запись значения B
Index++;
}
r /= 16;//Переназначить R
G /= 16;//Переназначить G
B /= 16;//Переназначить B
//Обработка переполнения значения цвета
r = r > 255 ? 255 : r;
r = r < 0 ? 0 : r;
g = g > 255 ? 255 : g;
g = g < 0 ? 0 : g;
b = b > 255 ? 255 : b;
b = b < 0 ? 0 : b;
bitmap.SetPixel(x - 1, y - 1, Color.FromArgb(r, g, b));//Переназначаем значение цвета указанной точке
}
This.pictureBox1.Image = bitmap;//Показать изображение с эффектом смягчения
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "подсказка сообщения");
}
}