You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
567 lines
22 KiB
567 lines
22 KiB
using System; |
|
using System.Collections.Generic; |
|
using System.Diagnostics; |
|
using System.Drawing; |
|
using System.Drawing.Drawing2D; |
|
using System.Drawing.Imaging; |
|
using System.Reflection; |
|
using System.Windows.Forms; |
|
using UTIL; |
|
|
|
namespace Test_img |
|
{ |
|
public partial class Form1 : Form |
|
{ |
|
Bitmap bm = null; |
|
Bitmap newbm = null; |
|
//int ter1 = 0; |
|
//int ter2 = 0; |
|
//int wMax = 0; |
|
//int hMax = 0; |
|
//int wMaxF = 0; |
|
//int hMaxF = 0; |
|
//int panelR = 117; |
|
//int panelD = 84; |
|
int xPos; |
|
int yPos; |
|
|
|
float zoomFactor = 1; |
|
Size resolution = new Size(0, 0); |
|
Size minform = new Size(666, 606); |
|
private Point startingPoint = Point.Empty; |
|
private Point movingPoint = Point.Empty; |
|
private bool panning = false; |
|
private bool select = false; |
|
private Point startSelPoint = Point.Empty; |
|
private Point stopSelPoint = Point.Empty; |
|
private Point SelPoint1 = Point.Empty; |
|
private Point SelPoint2 = Point.Empty; |
|
private Point MassCenter = Point.Empty; |
|
search srch = new search(); |
|
int imgsearch = 200; |
|
UInt32 fon = 200; |
|
|
|
public Form1() |
|
{ |
|
InitializeComponent(); |
|
} |
|
|
|
private void Form1_Load(object sender, EventArgs e) |
|
{ |
|
pictureBox1.MouseWheel += new MouseEventHandler(pictureBox1_MouseWheel); |
|
resolution = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Size; |
|
img_aspect.Text = $"Аспект: {zoomFactor:F3}"; |
|
StaticData.ValueChanged += (sender1, e1) => |
|
{ |
|
imgsearch = StaticData.DataBuffer; |
|
//img_srch.Text = StaticData.DataBuffer.ToString(); |
|
}; |
|
StaticData.SHandlerSearch = new StaticData.SHandler(SearchPixel); |
|
pictureBox1.Image = bm = new Bitmap(pictureBox1.Width, pictureBox1.Height); |
|
StaticData.TrgEventHandler += SearchPixel2; |
|
|
|
} |
|
private void Form1_SizeChanged(object sender, EventArgs e) |
|
{ |
|
if (this.WindowState != FormWindowState.Maximized) |
|
{ |
|
this.WindowState = FormWindowState.Normal; |
|
this.Size = minform; |
|
this.Location = new Point(resolution.Width / 2 - minform.Width / 2, resolution.Height / 2 - minform.Height / 2); |
|
Console.WriteLine($"{pictureBox1.Size.Width} {pictureBox1.Size.Height} {pictureBox1.Location.X} {pictureBox1.Location.Y}"); |
|
this.CenterToScreen(); |
|
} |
|
else |
|
{ |
|
this.WindowState = FormWindowState.Maximized; |
|
this.CenterToScreen(); |
|
Console.WriteLine($"{pictureBox1.Size.Width} {pictureBox1.Size.Height} {pictureBox1.Location.X} {pictureBox1.Location.Y}"); |
|
} |
|
movingPoint = new Point((pictureBox1.Width - bm.Width) / 2, (pictureBox1.Height - bm.Height) / 2); |
|
pictureBox1.Invalidate(); |
|
} |
|
private void pictureBox1_MouseEnter(object sender, EventArgs e) |
|
{ |
|
pictureBox1.MouseWheel += pictureBox1_MouseWheel; |
|
pictureBox1.Cursor = Cursors.Cross; |
|
} |
|
private void pictureBox1_MouseLeave(object sender, EventArgs e) |
|
{ |
|
pictureBox1.MouseWheel -= pictureBox1_MouseWheel; |
|
pictureBox1.Cursor = Cursors.Default; |
|
} |
|
private void pictureBox1_MouseWheel(object sender, MouseEventArgs e) |
|
{ |
|
pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Normal; |
|
float zf = zoomFactor; |
|
if(bm != null) |
|
{ |
|
if (e.Delta > 0 && zoomFactor * bm.Width < 8100) |
|
{ |
|
zoomFactor *= 1.1F; |
|
} |
|
if (e.Delta < 0 && zoomFactor * bm.Width > 100) |
|
{ |
|
zoomFactor /= 1.1F; |
|
} |
|
img_aspect.Text = $"Аспект: {zoomFactor:F3}"; |
|
movingPoint.X -= (int)(bm.Width * zoomFactor - bm.Width * zf) / 2; |
|
movingPoint.Y -= (int)(bm.Height * zoomFactor - bm.Height * zf) / 2; |
|
|
|
pictureBox1.Invalidate(); |
|
} |
|
} |
|
private void pictureBox1_MouseDown(object sender, MouseEventArgs e) |
|
{ |
|
if (e.Button == MouseButtons.Left) |
|
{ |
|
//Console.WriteLine($"X={e.X} Y={e.Y} " + |
|
// $"w={bm.Width * zoomFactor} h={bm.Height * zoomFactor} " + // размер картинки |
|
// $"mpx={movingPoint.X} mpy={movingPoint.Y} " + // картинка в боксе |
|
// $"xpos={xPos} ypos={yPos} " + // мышь в боксе |
|
// $"mx={xPos - movingPoint.X} my={yPos - movingPoint.Y} " + // мышь в картинке в боксе |
|
// $"mx={(xPos - movingPoint.X) / zoomFactor} my={(yPos - movingPoint.Y) / zoomFactor} " + // мышь в картинке в боксе |
|
// $"z={zoomFactor}"); |
|
select = true; |
|
startSelPoint = new Point(e.Location.X, e.Location.Y); |
|
stopSelPoint = new Point(e.Location.X, e.Location.Y); |
|
int xx = minmax<int>(0, bm.Width - 1, (int)((xPos - movingPoint.X) / zoomFactor)); |
|
int yy = minmax<int>(0, bm.Height - 1, (int)((yPos - movingPoint.Y) / zoomFactor)); |
|
SelPoint1 = new Point(xx, yy); |
|
SelPoint2 = new Point(xx, yy); |
|
} |
|
if (e.Button == MouseButtons.Middle) |
|
{ |
|
panning = true; |
|
startingPoint = new Point(e.Location.X - movingPoint.X, e.Location.Y - movingPoint.Y); |
|
} |
|
} |
|
private void pictureBox1_MouseUp(object sender, MouseEventArgs e) |
|
{ |
|
if (e.Button == MouseButtons.Left) |
|
{ |
|
select = false; |
|
int xx = minmax<int>(0, bm.Width - 1, (int)((xPos - movingPoint.X) / zoomFactor)); |
|
int yy = minmax<int>(0, bm.Height - 1, (int)((yPos - movingPoint.Y) / zoomFactor)); |
|
SelPoint2 = new Point(xx, yy); |
|
//Console.WriteLine($"x1 {SelPoint1.X} y1 {SelPoint1.Y} x3 {SelPoint2.X} y3 {SelPoint2.Y}"); |
|
Rectangle r = nrect(SelPoint1, SelPoint2); |
|
Console.WriteLine($"x1 {r.X} y1 {r.Y} x3 {r.X + r.Width} y3 {r.Y + r.Height}"); |
|
MassCenter = CalcCenterMass(r); |
|
Console.WriteLine($"x {MassCenter.X} y {MassCenter.Y}"); |
|
} |
|
if (e.Button == MouseButtons.Middle) |
|
{ |
|
panning = false; |
|
} |
|
} |
|
private void pictureBox1_MouseMove(object sender, MouseEventArgs e) |
|
{ |
|
xPos = e.X; // мышь в боксе |
|
yPos = e.Y; |
|
if (panning) |
|
{ |
|
movingPoint = new Point(e.Location.X - startingPoint.X, e.Location.Y - startingPoint.Y); |
|
pictureBox1.Invalidate(); |
|
} |
|
if (select) |
|
{ |
|
stopSelPoint = new Point(e.Location.X, e.Location.Y); |
|
int xx = minmax<int>(0, bm.Width - 1, (int)((xPos - movingPoint.X) / zoomFactor)); |
|
int yy = minmax<int>(0, bm.Height - 1, (int)((yPos - movingPoint.Y) / zoomFactor)); |
|
SelPoint2 = new Point(xx, yy); |
|
//using (Graphics g = pictureBox1.CreateGraphics()) |
|
//{ |
|
// g.DrawRectangle(new Pen(Color.Green, 1), nrect(startSelPoint, stopSelPoint)); |
|
//} |
|
//pictureBox1.Invalidate(); |
|
} |
|
if(bm != null) |
|
{ |
|
int xx = minmax<int>(0, bm.Width - 1, (int)((xPos - movingPoint.X) / zoomFactor)); |
|
int yy = minmax<int>(0, bm.Height - 1, (int)((yPos - movingPoint.Y) / zoomFactor)); |
|
img_color.Text = $"R:{bm.GetPixel(xx, yy).R:D3} G:{bm.GetPixel(xx, yy).G:D3} B:{bm.GetPixel(xx, yy).B:D3}"; |
|
img_coord.Text = $"X = {xx:D4} Y = {yy:D4}"; |
|
ttt.Text = $"{movingPoint.X:D4} {movingPoint.Y:D4}"; |
|
yyy.Text = $"{xPos:D4} {yPos:D4}"; |
|
} |
|
} |
|
private void pictureBox1_Paint(object sender, PaintEventArgs e) |
|
{ |
|
e.Graphics.Clear(Color.White); |
|
if (newbm != null) |
|
e.Graphics.DrawImage(ResizeImage(newbm, zoomFactor), movingPoint); |
|
if (select) |
|
e.Graphics.DrawRectangle(new Pen(Color.Green, 1), nrect(startSelPoint, stopSelPoint)); |
|
if (img_center.Checked) |
|
{ |
|
e.Graphics.DrawLine(new Pen(Color.LimeGreen, 1), |
|
BmToPb(MassCenter).X, |
|
BmToPb(MassCenter).Y - 20, |
|
BmToPb(MassCenter).X, |
|
BmToPb(MassCenter).Y + 20); |
|
e.Graphics.DrawLine(new Pen(Color.LimeGreen, 1), |
|
BmToPb(MassCenter).X - 20, |
|
BmToPb(MassCenter).Y, |
|
BmToPb(MassCenter).X + 20, |
|
BmToPb(MassCenter).Y); |
|
e.Graphics.DrawRectangle(new Pen(Color.LimeGreen, 1), BmToPb(MassCenter).X - 20, BmToPb(MassCenter).Y - 20, 40, 40); |
|
} |
|
GC.Collect(); |
|
} |
|
public Bitmap ResizeImage(Image image, float zoom) |
|
{ |
|
var destRect = new Rectangle(0, 0, (int)(image.Width * zoom), (int)(image.Height * zoom)); |
|
var destImage = new Bitmap((int)(image.Width * zoom), (int)(image.Height * zoom)); |
|
|
|
//destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); |
|
|
|
using (var graphics = Graphics.FromImage(destImage)) |
|
{ |
|
graphics.CompositingMode = CompositingMode.SourceCopy; |
|
graphics.CompositingQuality = CompositingQuality.HighQuality; |
|
if(img_smooth.Checked) |
|
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; |
|
else |
|
graphics.InterpolationMode = InterpolationMode.NearestNeighbor; |
|
graphics.SmoothingMode = SmoothingMode.HighQuality; |
|
graphics.PixelOffsetMode = PixelOffsetMode.Half; |
|
|
|
using (var wrapMode = new ImageAttributes()) |
|
{ |
|
wrapMode.SetWrapMode(WrapMode.TileFlipXY); |
|
//graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode); |
|
graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel); |
|
} |
|
} |
|
return destImage; |
|
} |
|
private T minmax<T>(T min, T max, T val) where T : IComparable<T> |
|
{ |
|
if (val.CompareTo(min) <= 0) |
|
return min; |
|
if (val.CompareTo(max) > 0) |
|
return max; |
|
return val; |
|
} |
|
private Rectangle nrect(Point p1, Point p3) |
|
{ |
|
Rectangle r = Rectangle.Empty; |
|
Point p2 = new Point(p3.X, p1.Y); |
|
Point p4 = new Point(p1.X, p3.Y); |
|
|
|
if (p1.X < p3.X && p1.Y < p3.Y) |
|
return new Rectangle(p1, new Size(p3.X - p1.X, p3.Y - p1.Y)); |
|
if (p1.X < p3.X && p1.Y > p3.Y) |
|
return new Rectangle(p4, new Size(p3.X - p4.X, p1.Y - p4.Y)); |
|
if (p1.X > p3.X && p1.Y < p3.Y) |
|
return new Rectangle(p2, new Size(p1.X - p2.X, p3.Y - p2.Y)); |
|
if (p1.X > p3.X && p1.Y > p3.Y) |
|
return new Rectangle(p3, new Size(p4.X - p3.X, p2.Y - p3.Y)); |
|
return r; |
|
} |
|
private void SearchPixel() |
|
{ |
|
List<Point> points = new List<Point>(); |
|
Stopwatch stopwatch = Stopwatch.StartNew(); |
|
UnsafeBitmap btm = new UnsafeBitmap(bm); |
|
btm.LockBitmap(); |
|
for (int y = 0; y < bm.Height; y++) |
|
{ |
|
for (int x = 0; x < bm.Width; x++) |
|
{ |
|
PixelData c = btm.GetPixel(x, y); |
|
if (c.blue >= imgsearch) |
|
{ |
|
points.Add(new Point(x, y)); |
|
//Console.WriteLine($"{x} {y}"); |
|
} |
|
} |
|
} |
|
stopwatch.Stop(); |
|
Console.WriteLine(stopwatch.Elapsed.ToString()); |
|
btm.Dispose(); |
|
using (Graphics g = Graphics.FromImage(newbm)) |
|
{ |
|
//g.Clear(Color.White); |
|
for (int i = 0; i < points.Count; i++) |
|
g.DrawEllipse(new Pen(Color.Red), points[i].X - 5, points[i].Y - 5, 10, 10); |
|
|
|
} |
|
pictureBox1.Invalidate(); |
|
} |
|
private Point CalcCenterMass(Rectangle r) |
|
{ |
|
Int32 sX = 0; |
|
Int32 sY = 0; |
|
Int32 sZ = 0; |
|
if (r.Width != 0 && r.Height != 0) |
|
{ |
|
UnsafeBitmap btm = new UnsafeBitmap(bm); |
|
btm.LockBitmap(); |
|
Int32 num = 1; |
|
for (int y = r.Y; y < r.Bottom; y++) |
|
{ |
|
for (int x = r.X; x < r.Right; x++) |
|
{ |
|
PixelData c = btm.GetPixel(x, y); |
|
if (minus_fon.Checked) |
|
{ |
|
sX += (Int32)((c.blue - fon) * x); |
|
sY += (Int32)((c.blue - fon) * y); |
|
sZ += (Int32)(c.blue - fon); |
|
} |
|
else |
|
{ |
|
sX += (Int32)(c.blue * x); |
|
sY += (Int32)(c.blue * y); |
|
sZ += (Int32)(c.blue); |
|
} |
|
num++; |
|
} |
|
} |
|
//sX /= 255; |
|
//sY /= 255; |
|
//sX /= num - 1; |
|
//sY /= num - 1; |
|
sX /= sZ; |
|
sY /= sZ; |
|
btm.Dispose(); |
|
Console.WriteLine($"num: {num} num2: {r.Width * r.Height} x: {sX} y: {sY}"); |
|
return new Point(sX, sY); |
|
} |
|
else |
|
return Point.Empty; |
|
} |
|
private Point BmToPb(Point p) |
|
{ |
|
return new Point((int)(p.X * zoomFactor + movingPoint.X), (int)(p.Y * zoomFactor + movingPoint.Y)); |
|
} |
|
|
|
#region Меню |
|
private void img_load_Click(object sender, EventArgs e) |
|
{ |
|
OpenFileDialog ofd = new OpenFileDialog(); |
|
ofd.Filter = "bitmap files (*.bmp)|*.bmp|All files (*.*)|*.*"; |
|
if (ofd.ShowDialog() != DialogResult.OK) |
|
return; |
|
bm = (Bitmap)Image.FromFile(ofd.FileNames[0]); |
|
newbm = (Bitmap)bm.Clone(); |
|
img_resolution.Text = $"{bm.Width} X {bm.Height}"; |
|
this.CenterToScreen(); |
|
zoomFactor = (float)pictureBox1.Width / (float)bm.Width; |
|
zoomFactor = 1; |
|
img_aspect.Text = $"Аспект: {zoomFactor:F3}"; |
|
movingPoint = new Point((pictureBox1.Width - bm.Width) / 2, (pictureBox1.Height - bm.Height) / 2); |
|
pictureBox1.Invalidate(); |
|
//pictureBox1.Image = ZoomControl(bm, zoomFactor); |
|
} |
|
private void exit_Click(object sender, EventArgs e) |
|
{ |
|
Application.Exit(); |
|
} |
|
private void развернутьToolStripMenuItem_Click(object sender, EventArgs e) |
|
{ |
|
this.WindowState = FormWindowState.Maximized; |
|
this.CenterToScreen(); |
|
movingPoint = new Point((pictureBox1.Width - bm.Width) / 2, (pictureBox1.Height - bm.Height) / 2); |
|
pictureBox1.Invalidate(); |
|
img_aspect.Text = $"Аспект: {zoomFactor:F3}"; |
|
} |
|
private void свернутьToolStripMenuItem_Click(object sender, EventArgs e) |
|
{ |
|
this.WindowState = FormWindowState.Normal; |
|
this.Size = new Size(666, 606); |
|
this.CenterToScreen(); |
|
movingPoint = new Point((pictureBox1.Width - bm.Width) / 2, (pictureBox1.Height - bm.Height) / 2); |
|
pictureBox1.Invalidate(); |
|
img_aspect.Text = $"Аспект: {zoomFactor:F3}"; |
|
} |
|
private void img_search_Click(object sender, EventArgs e) |
|
{ |
|
if (img_search.Checked) |
|
{ |
|
img_search.Image = Properties.Resources.CheckBoxChecked; |
|
srch.Show(); |
|
StaticData.Fon?.Invoke(fon); |
|
} |
|
else |
|
{ |
|
img_search.Image = Properties.Resources.CheckBoxUnchecked; |
|
srch.Hide(); |
|
} |
|
} |
|
private void img_save_Click(object sender, EventArgs e) |
|
{ |
|
SaveFileDialog sfd = new SaveFileDialog(); |
|
sfd.Filter = "bitmap files (*.bmp)|*.bmp|All files (*.*)|*.*"; |
|
if (sfd.ShowDialog() != DialogResult.OK) |
|
return; |
|
lock (this) |
|
{ |
|
newbm.Save(sfd.FileName, ImageFormat.Bmp); |
|
} |
|
} |
|
private void screenshot_Click(object sender, EventArgs e) |
|
{ |
|
using (Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height)) |
|
{ |
|
using (Graphics g = Graphics.FromImage(bitmap)) |
|
{ |
|
g.CopyFromScreen(new Point(this.Bounds.Left + pictureBox1.Left + 9, this.Bounds.Top + pictureBox1.Top + 32), Point.Empty, pictureBox1.Size); |
|
} |
|
SaveFileDialog sfd = new SaveFileDialog(); |
|
sfd.Filter = "bitmap files (*.bmp)|*.bmp|All files (*.*)|*.*"; |
|
if (sfd.ShowDialog() != DialogResult.OK) |
|
return; |
|
bitmap.Save(sfd.FileName, ImageFormat.Bmp); |
|
} |
|
} |
|
private void img_smooth_Click(object sender, EventArgs e) |
|
{ |
|
if (img_smooth.Checked) |
|
img_smooth.Image = Properties.Resources.CheckBoxChecked; |
|
else |
|
img_smooth.Image = Properties.Resources.CheckBoxUnchecked; |
|
|
|
pictureBox1.Invalidate(); |
|
} |
|
#endregion |
|
|
|
#region Загрузка тестовых картинок |
|
private void img1_Click(object sender, EventArgs e) |
|
{ |
|
bm = Properties.Resources.olo_02; |
|
newbm = (Bitmap)bm.Clone(); |
|
img_resolution.Text = $"{bm.Width} X {bm.Height}"; |
|
this.CenterToScreen(); |
|
zoomFactor = 1; |
|
img_aspect.Text = $"Аспект: {zoomFactor:F3}"; |
|
movingPoint = new Point((pictureBox1.Width - bm.Width) / 2, (pictureBox1.Height - bm.Height) / 2); |
|
pictureBox1.Invalidate(); |
|
imgfon(); |
|
} |
|
private void img2_Click(object sender, EventArgs e) |
|
{ |
|
bm = Properties.Resources.olo_03; |
|
newbm = (Bitmap)bm.Clone(); |
|
img_resolution.Text = $"{bm.Width} X {bm.Height}"; |
|
this.CenterToScreen(); |
|
zoomFactor = 1; |
|
img_aspect.Text = $"Аспект: {zoomFactor:F3}"; |
|
movingPoint = new Point((pictureBox1.Width - bm.Width) / 2, (pictureBox1.Height - bm.Height) / 2); |
|
pictureBox1.Invalidate(); |
|
imgfon(); |
|
} |
|
private void img3_Click(object sender, EventArgs e) |
|
{ |
|
bm = Properties.Resources.t1_320x256; |
|
newbm = (Bitmap)bm.Clone(); |
|
img_resolution.Text = $"{bm.Width} X {bm.Height}"; |
|
this.CenterToScreen(); |
|
zoomFactor = 1; |
|
img_aspect.Text = $"Аспект: {zoomFactor:F3}"; |
|
movingPoint = new Point((pictureBox1.Width - bm.Width) / 2, (pictureBox1.Height - bm.Height) / 2); |
|
pictureBox1.Invalidate(); |
|
imgfon(); |
|
} |
|
#endregion |
|
|
|
private void SearchPixel2() |
|
{ |
|
} |
|
|
|
private void img_fon_Click(object sender, EventArgs e) |
|
{ |
|
UnsafeBitmap btm = new UnsafeBitmap(bm); |
|
btm.LockBitmap(); |
|
UInt32 sc = 0; |
|
for (int y = 0; y < bm.Height; y++) |
|
{ |
|
PixelData c = btm.GetPixel(y, y); |
|
sc += (UInt32)(c.blue * c.blue); |
|
c = btm.GetPixel(bm.Width - 1 - y, y); |
|
sc += (UInt32)(c.blue * c.blue); |
|
} |
|
Console.WriteLine(sc.ToString()); |
|
sc = (UInt32)Math.Sqrt(sc / bm.Height / 2); |
|
Console.WriteLine(sc.ToString()); |
|
|
|
img_srch.Text = $"Фон: {sc}"; |
|
btm.UnlockBitmap(); |
|
btm.Dispose(); |
|
fon = sc; |
|
StaticData.Fon?.Invoke(sc); |
|
} |
|
private void imgfon() |
|
{ |
|
UnsafeBitmap btm = new UnsafeBitmap(bm); |
|
btm.LockBitmap(); |
|
UInt32 sc = 0; |
|
for (int y = 0; y < bm.Height; y++) |
|
{ |
|
PixelData c = btm.GetPixel(y, y); |
|
sc += (UInt32)(c.blue * c.blue); |
|
c = btm.GetPixel(bm.Width - 1 - y, y); |
|
sc += (UInt32)(c.blue * c.blue); |
|
} |
|
Console.WriteLine(sc.ToString()); |
|
sc = (UInt32)Math.Sqrt(sc / bm.Height / 2); |
|
Console.WriteLine(sc.ToString()); |
|
|
|
img_srch.Text = $"Фон: {sc}"; |
|
btm.UnlockBitmap(); |
|
btm.Dispose(); |
|
fon = sc; |
|
StaticData.Fon?.Invoke(sc); |
|
} |
|
|
|
private void img_timer_Click(object sender, EventArgs e) |
|
{ |
|
if (img_timer.Checked) |
|
{ |
|
img_timer.Image = Properties.Resources.CheckBoxChecked; |
|
timer1.Enabled = true; |
|
} |
|
else |
|
{ |
|
img_timer.Image = Properties.Resources.CheckBoxUnchecked; |
|
timer1.Enabled = false; |
|
} |
|
} |
|
|
|
private void timer1_Tick(object sender, EventArgs e) |
|
{ |
|
newbm = (Bitmap)bm.Clone(); |
|
if (img_search.Checked) |
|
{ |
|
SearchPixel(); |
|
} |
|
pictureBox1.Invalidate(); |
|
} |
|
|
|
private void img_center_Click(object sender, EventArgs e) |
|
{ |
|
if (img_center.Checked) |
|
{ |
|
img_center.Image = Properties.Resources.CheckBoxChecked; |
|
} |
|
else |
|
{ |
|
img_center.Image = Properties.Resources.CheckBoxUnchecked; |
|
} |
|
} |
|
|
|
private void minus_fon_Click(object sender, EventArgs e) |
|
{ |
|
if (minus_fon.Checked) |
|
{ |
|
minus_fon.Image = Properties.Resources.CheckBoxChecked; |
|
} |
|
else |
|
{ |
|
minus_fon.Image = Properties.Resources.CheckBoxUnchecked; |
|
} |
|
} |
|
} |
|
}
|
|
|