1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
| using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.IO;
namespace Image004
{
public class Form_Image : Form //класс Form_Image001 наследуется из класса Form
{
public Form_Image(string name_Image) //передача параметра из главной функции
{
int HeightScreen = Screen.PrimaryScreen.WorkingArea.Height; //ширина экрана
int WidthScreen = Screen.PrimaryScreen.WorkingArea.Width; // длина экрана
//установка свойств формы
KeyPreview = true;//cвойство формы,которое передает все события клавиатуры для объектов формы непосредственно на форму.
AutoSize = true; //подгонка размера формы
TopMost = true; // изображение на форме поверх всех панелей
//Задаем параметры PictureBox
PictureBox pb = new PictureBox();//создаем объект класса PictureBox,куда поместим картинку
pb.Name = "picturebox";
pb.Image = Image.FromFile(name_Image);//вставить картинку из файла-папки с проектом
int IM_H = Convert.ToInt32(pb.Image.Size.Height);
int IM_W = Convert.ToInt32(pb.Image.Size.Width);
pb.Width = WidthScreen;//ширина
pb.Height = HeightScreen;//длина
this.Controls.Add(pb); // добавление элемента
Bitmap bitmap_frame = new Bitmap(pb.Image);//создаем новый объект класса Bitmap
KeyDown += new System.Windows.Forms.KeyEventHandler(Form_Image_KeyDown); // подписка на событие KeyDown
Pixel(name_Image, bitmap_frame, IM_H, IM_W);//вызов функции Pixel для разложения пикселей картинки на составляющие RGB
}
public void Pixel(string name_Image, Bitmap bitmap_frame, int IM_H, int IM_W)//объявляем функцию Pixel
{
try
{
Color[,] pix = new Color[IM_W, IM_H];// в массив pix записываем координаты каждого пикселя
//в циклах выбираем фрагмент изображения,каждый пиксель которого будем раскладывать на составляющие RGB
Color pi = bitmap_frame.GetPixel(0, 0);
int[] vertikal = new int[IM_H];
int s =1;
for (int y = 0; y < IM_H; y++)//фрагмент от 0 до IM_H по высоте
{
bool flag = true;
for (int x = 0; x < IM_W; x++)//возьмем фрагмент от 0 до IM_W по ширине
{
pix[x, y] = bitmap_frame.GetPixel(x, y);//получаем и заносим в массив pix цветовую схему каждого пикселя
if (Convert.ToInt32(pix[x, y].R) <= 220 && Convert.ToInt32(pix[x, y].G) <= 220 && Convert.ToInt32(pix[x, y].B) <= 220)
{
flag = false;
}
}
if (flag)
{
for (int k = 0; k < IM_W; k++)
pix[k, y] = Color.Blue;
}
}
for (int l = 0; l < IM_H; l++)
{
if (pix[0, l] == Color.Blue && (l+1)<IM_H && pix[0, l + 1]!= Color.Blue)
{
vertikal[s] = l;
s++;
}
else if (pix[0, l] == Color.White && (l + 1) < IM_H && pix[0, l + 1] == Color.Blue)
{
vertikal[s] = l;
s++;
}
}
for (s = 1; (s+2) < vertikal.Length; s += 2)
{
for (int x = 0; x < IM_W; x++)
{
bool flag1 = true;
for (int y = vertikal[s]; y <= vertikal[s + 1]; y++)
{
pix[x, y] = bitmap_frame.GetPixel(x, y);//получаем и заносим в массив pix цветовую схему каждого пикселя
if (Convert.ToInt32(pix[x, y].R) <=220 && Convert.ToInt32(pix[x, y].G) <= 220 && Convert.ToInt32(pix[x, y].B) <= 220)
{
flag1 = false;
}
}
if (flag1)
{
for (int y = vertikal[s]; y <= vertikal[s + 1]; y++)
{
pix[x, y] = Color.Blue;
}
}
}
}
Bitmap bmp = new Bitmap(IM_W, IM_H);//создаем обект bmp битовой карты
for (int j = 0; j < IM_H; j++)
for (int i = 0; i < IM_W; i++)
{
bmp.SetPixel(i, j, pix[i, j]);//определяем для объекта bmp пиксель с координатами i и j
}
IntPtr bmp_handle = bmp.GetHbitmap(); //Создаем дескриптор bmp_handle - указатель на объект точечного рисунка,хранящегося в bmp
PictureBox pbox = (Controls.Find("picturebox", true)[0]) as PictureBox;//создаем объект класса PictureBox
pbox.SizeMode = PictureBoxSizeMode.StretchImage;//растянуть изображение на всю, заданную pbox область с размерами(IM_W,IM_H)
// pbox.Location = new System.Drawing.Point(0, 0);//точка с координатами верхнего левого угла расположения pbox
pbox.Size = new System.Drawing.Size(IM_W, IM_H);// размер pbox
pbox.Image = Image.FromHbitmap(bmp_handle);
}
catch (Exception e)//если прочитать не получилось
{
// Let the user know what went wrong.
Console.WriteLine("The file could not be read:");
Console.WriteLine(e.Message);
}
}
private void Form_Image_KeyDown(object sender, KeyEventArgs e) // событие нажатия клавиши
{
if (e.KeyCode >= Keys.A || e.KeyCode >= Keys.Tab) // проверка нажата ли одна из клавиш
{
this.Close(); // закрытие формы
}
}
}
class Program
{
static void Main(string[] args)
{
/*System.Diagnostics.Process proc = new System.Diagnostics.Process();
// Приложение, которое будем запускать
proc.StartInfo.FileName = "PDF Image Extraction Wizard 3.1\\PdfWiz.exe";
proc.EnableRaisingEvents = true;
//proc.Exited += new EventHandler(proc_Exited);
proc.Start();
proc.WaitForExit();
proc.Close();
Console.WriteLine("Press any key to stop this application ...");
Console.ReadKey(true);*/
Application.EnableVisualStyles();//сделать возможными визуальные стили для приложения
Application.Run(new Form_Image(args[0])); // передача строки с названием картинки в функции
}
}
} |