- •Техническое задание Постановка задачи
- •Введение
- •Описание алгоритмов реализации эффектов для изображения
- •Наложение телевизионных помех (имитация)
- •Случайно разбросанные квадратики
- •Деление изображения линиями на 4 части от центра к краям
- •Деление изображения линиями на 4 части от краев к центру
- •Алгоритм установки прозрачности изображения
- •Алгоритм получения негатива изображения
- •Алгоритм фильтрации изображения для ослабления перепадов яркости
- •Алгоритм получения черно-белого изображения
- •Описание программного продукта
- •Программно-аппаратные требования
- •Язык и среда программирования
- •Входные и выходные данные
- •Структура программы
- •Алгоритм восстановления прозрачного изображения
- •Описание структурных элементов программы
- •Описание интерфейса и инструкция пользователю
- •«Случайно разбросанные квадратики»;
- •Заключение
- •Библиографический список
- •Приложение 1
- •Приложение 2
Заключение
Для курсовой работы была выбрана оптимальная среда Windows и язык разработки, подобрана необходимая литература, изучены и использованы простые алгоритмы для реализации графических эффектов к изображению, была разработана и отлажена программа.
Для реализации алгоритмов использовался такой язык программирования, как Visual С#, использовалась среда программирования Microsoft Visual Studio 2012.
Отладка и тестирование проводились в среде разработки Microsoft Visual Studio 2012.
Результатом данной курсовой работы является программный продукт, который реализует добавление к изображению различных эффектов со статической и динамической демонстрацией.
Программа работает корректно, имеется возможность для добавления других эффектов.
Библиографический список
Н. Б. Культин «Visual C# в задачах и примерах» БХВ-Петербург, 2009
Селянкин В.В., Шилов Д.А. Руководство к лабораторным работам «Двумерная обработка растровых изображений» по курсу «Компьютерная графика», Таганрог: Изд-во ТРТУ, 2001. 28с.
MSDN – сеть разработчиков Microsoft
http://msdn.microsoft.com/ru-ru#fbid=PSBoak1OByD
Приложение 1
Листинг программного продукта:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Negative
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public Timer tmr1;
public Image ishImg;
public Int32 ix = 2;
public Int32 iy = 2;
public bool ishImgenable = false;
private void MakeGray(Bitmap bmp) //Преобразование изображения в черно-белое
{
// Задаём формат Пикселя
PixelFormat pxf = PixelFormat.Format24bppRgb;
// Получаем данные картинки
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
//Блокируем набор данных изображения в памяти
BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, pxf);
// Получаем адрес первой линии
IntPtr ptr = bmpData.Scan0;
// Задаём массив из Byte и помещаем в него набор данных.
// int numBytes = bmp.Width * bmp.Height * 3;
//На 3 умножаем - поскольку RGB цвет кодируется 3-мя байтами
int numBytes = bmpData.Stride * bmp.Height;
int widthBytes = bmpData.Stride;
byte[] rgbValues = new byte[numBytes];
// Копируем значения в массив
Marshal.Copy(ptr, rgbValues, 0, numBytes);
// Перебираем пикселы по 3 байта на каждый и меняем значения
for (int counter = 0; counter < rgbValues.Length; counter += 3)
{
int value = rgbValues[counter] + rgbValues[counter + 1] + rgbValues[counter + 2];
byte color_b = 0;
color_b = Convert.ToByte(value / 3);
rgbValues[counter] = color_b;
rgbValues[counter + 1] = color_b;
rgbValues[counter + 2] = color_b;
}
// Копируем набор данных обратно в изображение
Marshal.Copy(rgbValues, 0, ptr, numBytes);
// Разблокируем набор данных изображения в памяти
bmp.UnlockBits(bmpData);
}
private Color _GetSumOfColor(Color[] colors) // Рассчет среднего значения изменения яркости d
{
int rSum = 0;
int gSum = 0;
int bSum = 0;
foreach (var color in colors)
{
rSum += color.R;
gSum += color.G;
bSum += color.B;
}
if (rSum < 0) rSum = 0;
if (rSum > 255) rSum = 255;
if (gSum < 0) gSum = 0;
if (gSum > 255) gSum = 255;
if (bSum < 0) bSum = 0;
if (bSum > 255) bSum = 255;
return Color.FromArgb(rSum, gSum, bSum);
}
private Color _SubColors(Color x, Color y) // Рассчет разницы яркости одной из восьми точек вокруг обрабатываемой и обрабатываемой по интенсивности каждого цвета RGB
{
return Color.FromArgb(Math.Abs(x.R - y.R), Math.Abs(x.G - y.G), Math.Abs(x.B - y.B));
}
private Bitmap _IncreaseBrightness(Image original, int sign)// Изменения яркости
{
Bitmap bmp = new Bitmap(original);
var points = new[] { new Point(-1, 1), new Point(0,1), new Point(1,1),
new Point(-1, 0), new Point(0,0), new Point(1,0),
new Point(-1, -1), new Point(0,-1), new Point(1,-1) };
var outBmp = new Bitmap(bmp.Width, bmp.Height);
int w = bmp.Width;
int h = bmp.Height;
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
int count = 0;
foreach (var point in points)
{
if (!((x + point.X >= 0) && (x + point.X < w) && (y + point.Y >= 0) && (y + point.Y < h))) ++count;
}
if (count == 0)
{
Color d = _GetSumOfColor(new[]{_SubColors(bmp.GetPixel(x-1, y+1), bmp.GetPixel(x,y)),
_SubColors(bmp.GetPixel(x, y+1), bmp.GetPixel(x,y)),
_SubColors(bmp.GetPixel(x+1, y+1), bmp.GetPixel(x,y)),
_SubColors(bmp.GetPixel(x-1, y), bmp.GetPixel(x,y)),
_SubColors(bmp.GetPixel(x+1, y), bmp.GetPixel(x,y)),
_SubColors(bmp.GetPixel(x-1, y-1), bmp.GetPixel(x,y)),
_SubColors(bmp.GetPixel(x, y-1), bmp.GetPixel(x,y)),
_SubColors(bmp.GetPixel(x+1, y-1), bmp.GetPixel(x,y))
});
double r = 0;
double g = 0;
double b = 0;
if (sign == 0)
{
r = bmp.GetPixel(x, y).R + d.R;
g = bmp.GetPixel(x, y).G + d.G;
b = bmp.GetPixel(x, y).B + d.B;
}
else if (sign == 1)
{
r = bmp.GetPixel(x, y).R - d.R;
g = bmp.GetPixel(x, y).G - d.G;
b = bmp.GetPixel(x, y).B - d.B;
}
else if (sign == 2)
{
if (bmp.GetPixel(x, y).R >= d.R) r = bmp.GetPixel(x, y).R + d.R; else r = bmp.GetPixel(x, y).R - d.R;
if (bmp.GetPixel(x, y).G >= d.G) g = bmp.GetPixel(x, y).G + d.G; else g = bmp.GetPixel(x, y).G - d.G;
if (bmp.GetPixel(x, y).B >= d.B) b = bmp.GetPixel(x, y).B + d.B; else b = bmp.GetPixel(x, y).B - d.B;
}
if (r < 0) r = 0;
if (r > 255) r = 255;
if (g < 0) g = 0;
if (g > 255) g = 255;
if (b < 0) b = 0;
if (b > 255) b = 255;
outBmp.SetPixel(x, y, Color.FromArgb((int)r, (int)g, (int)b));
}
}
}
return outBmp;
}
private static Image Kvadr(Image original)// Метод случайного разбрасывания черных квадратиков по изображению
{
Bitmap KvadrBmp = new Bitmap(original);
Random r = new Random();
int PictureHeight = KvadrBmp.Height;
int PictureWidth = KvadrBmp.Width;
int iter = PictureWidth * PictureHeight / 100000;
int i = 0;
while (i < iter)
{
int numpx = r.Next(3, PictureWidth-3);
int numpy = r.Next(3, PictureHeight-3);
KvadrBmp.SetPixel(numpx, numpy, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx-1, numpy-1, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx-1, numpy, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx, numpy-1, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx+1, numpy+1, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx+1, numpy, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx, numpy+1, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx+1, numpy-1, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx-1, numpy+1, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx + 2, numpy, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx, numpy - 2, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx - 2, numpy, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx, numpy + 2, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx - 2, numpy - 2, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx - 1, numpy - 2, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx - 2, numpy - 1, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx + 2, numpy - 2, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx + 2, numpy - 1, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx + 1, numpy - 2, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx + 2, numpy + 2, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx + 1, numpy + 2, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx + 2, numpy + 1, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx - 2, numpy + 2, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx - 1, numpy + 2, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx - 2, numpy + 1, Color.FromArgb(255, 0, 0, 0));
KvadrBmp.SetPixel(numpx, numpy - 2, Color.FromArgb(255, 0, 0, 0));
i++;
}
return KvadrBmp;
}
private static Image Proz(Image original, int procent)// Метод установки прозрачности изображения
{
Bitmap ProzBmp = new Bitmap(original);
Random r = new Random();
int PictureHeight = ProzBmp.Height;
int PictureWidth = ProzBmp.Width;
int iter = PictureWidth * PictureHeight / 100;
int i = 0;
while (i < iter)
{
int numpx = r.Next(0, PictureWidth);
int numpy = r.Next(0, PictureHeight);
int rcanal = ProzBmp.GetPixel(numpx, numpy).R;
int gcanal = ProzBmp.GetPixel(numpx, numpy).G;
int bcanal = ProzBmp.GetPixel(numpx, numpy).B;
ProzBmp.SetPixel(numpx, numpy, Color.FromArgb(procent, rcanal, gcanal, bcanal));
i++;
}
return ProzBmp;
}
private static Image Aproz(Image original)// Метод восстановления прозрачного изображения
{
Bitmap AprozBmp = new Bitmap(original);
Random r = new Random();
int PictureHeight = AprozBmp.Height;
int PictureWidth = AprozBmp.Width;
int iter = PictureWidth * PictureHeight / 100;
int i = 0;
while (i < iter)
{
int numpx = r.Next(0, PictureWidth);
int numpy = r.Next(0, PictureHeight);
int rcanal = AprozBmp.GetPixel(numpx, numpy).R;
int gcanal = AprozBmp.GetPixel(numpx, numpy).G;
int bcanal = AprozBmp.GetPixel(numpx, numpy).B;
AprozBmp.SetPixel(numpx, numpy, Color.FromArgb(255, rcanal, gcanal, bcanal));
i++;
}
return AprozBmp;
}
private static Image Invert(Image original)// Метод получения негатива изображения
{
Bitmap myImage = new Bitmap(original);
BitmapData imageData = myImage.LockBits(new Rectangle(0, 0, myImage.Width, myImage.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
int stride = imageData.Stride;
IntPtr Scan0 = imageData.Scan0;
unsafe
{
byte* p = (byte*)(void*)Scan0;
int nOffset = stride - myImage.Width * 4;
int nWidth = myImage.Width;
for (int y = 0; y < myImage.Height; y++)
{
for (int x = 0; x < nWidth; x++)
{
p[0] = (byte)(255 - p[0]);
p[1] = (byte)(255 - p[1]);
p[2] = (byte)(255 - p[2]);
p += 4;
}
p += nOffset;
}
}
myImage.UnlockBits(imageData);
return (Image)myImage;
}
private static Bitmap GenerateNoise(Image original)// Метод создания из изображения имитации телевизионных помех
{
Bitmap finalBmp = new Bitmap(original);
Random r = new Random();
int PictureHeight = finalBmp.Height;
int PictureWidth = finalBmp.Width;
int iter = PictureWidth * PictureHeight / 10;
int i = 0;
while (i < iter)
{
int numc = r.Next(0, 256);
int numpx = r.Next(0, PictureWidth);
int numpy = r.Next(0, PictureHeight);
finalBmp.SetPixel(numpx, numpy, Color.FromArgb(255, numc, numc, numc));
i++;
}
return finalBmp;
}
public Image Kvadrcentrout(Image original)// Метод деления изображения на 4 части черными линиями толщиной в 5 пикселей от центра изображения к его краям
{
Bitmap centroutBmp = new Bitmap(original);
Random r = new Random();
float py = centroutBmp.Height / 2;
float px = centroutBmp.Width / 2;
int x = (int)px;
int y = (int)py;
int numpx = x;
int numpy = y - ix;
centroutBmp.SetPixel(numpx, numpy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpy - 2, Color.FromArgb(255, 0, 0, 0));
int numpyy = y + ix;
centroutBmp.SetPixel(numpx, numpyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpyy - 2, Color.FromArgb(255, 0, 0, 0));
int numpxx = x + iy;
int numpyyy = y;
centroutBmp.SetPixel(numpxx, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 1, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 1, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 1, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 1, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 1, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 1, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 2, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 2, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 2, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 1, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 2, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 2, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 2, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 1, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 2, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 1, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 2, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 2, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 1, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 2, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
int numpxxx = x - iy;
centroutBmp.SetPixel(numpxxx, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 1, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 1, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 1, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 1, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 1, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 1, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 2, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 2, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 2, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 1, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 2, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 2, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 2, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 1, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 2, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 1, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 2, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 2, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 1, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 2, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
return centroutBmp;
}
public Image Kvadrcentrin(Image original)// Метод деления изображения на 4 части черными линиями толщиной в 5 пикселей от краев изображения к его центру
{
Bitmap centroutBmp = new Bitmap(original);
Random r = new Random();
int x = centroutBmp.Width;
int y = centroutBmp.Height;
int numpx = x / 2;
int numpy = y - ix - 1;
centroutBmp.SetPixel(numpx, numpy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpy - 2, Color.FromArgb(255, 0, 0, 0));
int numpyy = ix;
centroutBmp.SetPixel(numpx, numpyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 1, numpyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx + 2, numpyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 1, numpyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx - 2, numpyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpx, numpyy - 2, Color.FromArgb(255, 0, 0, 0));
int numpxx = x - iy - 1;
int numpyyy = y / 2;
centroutBmp.SetPixel(numpxx, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 1, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 1, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 1, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 1, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 1, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 1, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 2, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 2, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 2, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 1, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 2, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 2, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 2, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 1, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 2, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 1, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx + 2, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 2, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 1, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx - 2, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxx, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
int numpxxx = iy;
centroutBmp.SetPixel(numpxxx, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 1, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 1, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 1, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 1, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 1, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 1, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 2, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 2, numpyyy, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 2, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 1, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 2, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 2, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 2, numpyyy - 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 1, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 2, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 1, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx + 2, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 2, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 1, numpyyy + 2, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx - 2, numpyyy + 1, Color.FromArgb(255, 0, 0, 0));
centroutBmp.SetPixel(numpxxx, numpyyy - 2, Color.FromArgb(255, 0, 0, 0));
return centroutBmp;
}
private void TimerNoize(object sender, EventArgs e)//Таймер для Метода создания из изображения имитации телевизионных помех
{
pictureBox1.Image = GenerateNoise(pictureBox1.Image);
}
private void TimerProzr100(object sender, EventArgs e)//Таймер для метода установки прозрачности изображения на 100%
{
pictureBox1.Image = Proz(pictureBox1.Image,1);
}
private void TimerProzr25(object sender, EventArgs e)//Таймер для метода установки прозрачности изображения на 25%
{
pictureBox1.Image = Proz(pictureBox1.Image, 191);
}
private void TimerProzr50(object sender, EventArgs e)//Таймер для метода установки прозрачности изображения на 50%
{
pictureBox1.Image = Proz(pictureBox1.Image, 128);
}
private void TimerProzr75(object sender, EventArgs e)//Таймер для метода установки прозрачности изображения на 25%
{
pictureBox1.Image = Proz(pictureBox1.Image, 64);
}
private void TimerAprozr(object sender, EventArgs e)//Таймер для метода восстановление непрозрачности прозрачного изображения
{
pictureBox1.Image = Aproz(pictureBox1.Image);
}
private void TimerKvadr(object sender, EventArgs e)//Таймер для метода случайного разбрасывания черных квадратиков по изображению
{
pictureBox1.Image = Kvadr(pictureBox1.Image);
}
private void Timerkvadrcentrout(object sender, EventArgs e)// Таймер для метода деления изображения на 4 части черными линиями толщиной в 5 пикселей от центра изображения к его краям
{
pictureBox1.Image = Kvadrcentrout(pictureBox1.Image);
if (ix <= (pictureBox1.Image.Height) / 2 - 4) { ix++; }
else ix = 2;
if (iy <= (pictureBox1.Image.Width) / 2 - 4) { iy++; }
else iy = 2;
}
private void Timerkvadrcentrin(object sender, EventArgs e)// Таймер для метода деления изображения на 4 части черными линиями толщиной в 5 пикселей от краев изображения к его центру
{
pictureBox1.Image = Kvadrcentrin(pictureBox1.Image);
if (ix <= (pictureBox1.Image.Height) / 2 - 4) { ix++; }
else ix = 2;
if (iy <= (pictureBox1.Image.Width) / 2 - 4) { iy++; }
else iy = 2;
}
private void button1_Click(object sender, EventArgs e)// Далее следуют обработчики событий нажатий на кнопки
{
OpenFileDialog openImg = new OpenFileDialog();
openImg.Title = "Открыть изображение";
openImg.Filter = "*.jpg|*.jpg|Все файлы (*.*)|*.*";
if (openImg.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = new Bitmap(openImg.OpenFile());
}
openImg.Dispose();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
if (ishImgenable == false)
{
ishImg = pictureBox1.Image;
ishImgenable = true;
}
pictureBox1.Image = Invert(pictureBox1.Image);
}
private void button3_Click(object sender, EventArgs e)
{
if (ishImgenable == false)
{
ishImg = pictureBox1.Image;
ishImgenable = true;
}
tmr1 = new Timer();
tmr1.Interval = 10;
tmr1.Tick += new System.EventHandler(TimerNoize);
tmr1.Start();
}
private void button4_Click(object sender, EventArgs e)
{
tmr1.Stop();
}
private void button5_Click(object sender, EventArgs e)
{
pictureBox1.Image = ishImg;
}
private void button6_Click(object sender, EventArgs e)
{
if (ishImgenable == false)
{
ishImg = pictureBox1.Image;
ishImgenable = true;
}
tmr1 = new Timer();
tmr1.Interval = 10;
tmr1.Tick += new System.EventHandler(TimerKvadr);
tmr1.Start();
}
private void button7_Click(object sender, EventArgs e)
{
if (ishImgenable == false)
{
ishImg = pictureBox1.Image;
ishImgenable = true;
}
tmr1 = new Timer();
tmr1.Interval = 1;
tmr1.Tick += new System.EventHandler(TimerProzr100);
tmr1.Start();
}
private void button8_Click(object sender, EventArgs e)
{
tmr1 = new Timer();
tmr1.Interval = 1;
tmr1.Tick += new System.EventHandler(TimerAprozr);
tmr1.Start();
}
private void button9_Click(object sender, EventArgs e)
{
if (ishImgenable == false)
{
ishImg = pictureBox1.Image;
ishImgenable = true;
}
tmr1 = new Timer();
tmr1.Interval = 1;
tmr1.Tick += new System.EventHandler(TimerProzr25);
tmr1.Start();
}
private void button10_Click(object sender, EventArgs e)
{
if (ishImgenable == false)
{
ishImg = pictureBox1.Image;
ishImgenable = true;
}
tmr1 = new Timer();
tmr1.Interval = 1;
tmr1.Tick += new System.EventHandler(TimerProzr50);
tmr1.Start();
}
private void button11_Click(object sender, EventArgs e)
{
if (ishImgenable == false)
{
ishImg = pictureBox1.Image;
ishImgenable = true;
}
tmr1 = new Timer();
tmr1.Interval = 1;
tmr1.Tick += new System.EventHandler(TimerProzr75);
tmr1.Start();
}
private void button1_Click_1(object sender, EventArgs e)
{
if (ishImgenable == false)
{
ishImg = pictureBox1.Image;
ishImgenable = true;
}
tmr1 = new Timer();
tmr1.Interval = 1;
tmr1.Tick += new System.EventHandler(Timerkvadrcentrout);
tmr1.Start();
}
private void button2_Click_1(object sender, EventArgs e)
{
if (ishImgenable == false)
{
ishImg = pictureBox1.Image;
ishImgenable = true;
}
tmr1 = new Timer();
tmr1.Interval = 1;
tmr1.Tick += new System.EventHandler(Timerkvadrcentrin);
tmr1.Start();
}
private void button3_Click_1(object sender, EventArgs e)
{
if (ishImgenable == false)
{
ishImg = pictureBox1.Image;
ishImgenable = true;
}
pictureBox1.Image = _IncreaseBrightness (pictureBox1.Image,0);
}
private void button4_Click_1(object sender, EventArgs e)
{
if (ishImgenable == false)
{
ishImg = pictureBox1.Image;
ishImgenable = true;
}
pictureBox1.Image = _IncreaseBrightness(pictureBox1.Image, 1);
}
private void button5_Click_1(object sender, EventArgs e)
{
if (ishImgenable == false)
{
ishImg = pictureBox1.Image;
ishImgenable = true;
}
pictureBox1.Image = _IncreaseBrightness(pictureBox1.Image, 2);
}
private void button6_Click_1(object sender, EventArgs e)
{
if (ishImgenable == false)
{
ishImg = pictureBox1.Image;
ishImgenable = true;
}
Bitmap b = new Bitmap(pictureBox1.Image);
MakeGray(b);
Image img = b;
pictureBox1.Image = img;
}
private void textBox4_TextChanged(object sender, EventArgs e)
{
}
private void button7_Click_1(object sender, EventArgs e)
{
Bitmap bmpSave = (Bitmap)pictureBox1.Image;
SaveFileDialog sfd = new SaveFileDialog();
sfd.DefaultExt = "bmp";
sfd.Filter = "JPEG files (*.jpg)|*.jpg|BMP files (*.bmp)|*.bmp";
if (sfd.ShowDialog() == DialogResult.OK)
bmpSave.Save(sfd.FileName, ImageFormat.Bmp);
}
private void saveFileDialog1_FileOk(object sender, CancelEventArgs e)
{
}
}
}
