string base64 = project.Variables["base64"].Value;
using (Bitmap img = new Bitmap(new MemoryStream(Convert.FromBase64String(base64)))) {
int[,]arr = new int[img.Width,img.Height];
double b = 0;
for (int y = 0; y < img.Height; y++)
for (int x = 0; x < img.Width; x++)
b += img.GetPixel(x, y).GetBrightness();
b = b / (img.Width * img.Height);
b = b < .5 ? .2 : b;
b = b > .5 ? .7 : b;
// Преобразование изображения в черно-белое на основе средней яркости
for (int y = 0; y < img.Height; y++)
for (int x = 0; x < img.Width; x++)
arr[x,y] = img.GetPixel(x, y).GetBrightness() > b ? 0 : 1;
project.Context["bin_int"] = arr; // Результат выведем в контекст
}
int[,] img = project.Context["bin_int"]; // Взяли данные с контекста
List<int> x_img = new List<int>();
List<int> y_img = new List<int>();
for (int x = 0; x < img.GetLength(0); x++){
for (int y = 0; y < img.GetLength(1); y++) {
if(img[x,y] == 1) {
x_img.Add(x);
y_img.Add(y);
}
}
}
int x_max = x_img.Max();
int x_min = x_img.Min();
int y_max = y_img.Max();
int y_min = y_img.Min();
if(x_max < img.GetLength(0)) x_max++;
if(x_min > 0) x_min--;
if(y_max<img.GetLength(1)) y_max++;
if(y_min>0) y_min--;
string base64 = string.Empty;
using (Bitmap bmp = new Bitmap(x_max-x_min, y_max-y_min)){
for(int y = y_min; y<y_max; y++)
for(int x = x_min; x<x_max;x++)
bmp.SetPixel(x-x_min, y-y_min, img[x, y] == 1 ? Color.Black : Color.White);
using (var ms = new MemoryStream()) {
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
base64= Convert.ToBase64String(ms.GetBuffer());
}
}
project.Context["bin_base64"] = base64; // Тут находится обрезанная картинка
string base64_1 = project.Variables["base64"].Value;
string base64_2 = project.Context["bin_base64"];
string image_html = String.Empty;
image_html = string.Format(@"<img style=""display: block; border-style: solid;border-color: red;margin:10px auto;"" width="""" src=""data:image/png;base64,{0}"" alt=""CAPTCHA Image"" /></div>",base64_1);
image_html= image_html+ string.Format(@"<p></p><div><img style=""display: block; border-style: solid;border-color: red; margin:10px auto; "" width="""" src=""data:image/png;base64,{0}"" alt=""CAPTCHA Image"" /></div>",base64_2);
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
string html = string.Format(@"<html><body>{0}</body></html>",image_html);
tab.SetSourceText(html);
Посмотреть вложение 98073
Посмотреть вложение 98074
А дальше чтобы что-то делать - нужно собрать базу картинок, чтобы убедиться, что совпадения есть.
И база должна быть не 72 картинки, как говорят выше, а как можно больше, так как картинки могут иметь искажения.
Но, принцип думаю я объяснил - собираете базу картинок, режете их по периметру, дальше смотрите появляются ли совпадения - если появляются - задача решена. Если совпадений нет - тогда уже нужно придумывать как имея центральную точку + угол определить куда он смотрит.....