снова вернулся к вам ))
Дано: картинка, у которой есть в некоторых местах последовательность из пикселей одного цвета.
Надо: выделить другим цветом идущие последовательно пиксели, более или равное заданному значению.
Привожу код, как я это вижу, но у меня выскакивает постоянно одна ошибка, что то ему там по координатам не нравится.
Код: Выделить всё
// Name: Repeater 1.0
// Submenu: Advanced
// Author: PapooAss
// Title: Repeater 1.0
// Version: 1.0
// Desc:
// Keywords:
// URL:
// Help:
#region UICode
int Amount1 = 0; // [-100,100] Голубой-Красный
int Amount2 = 100; // [-100,100] Пурпурный-Зеленый
int Amount3 = 0; // [-100,100] Желтый-Синий
int Amount4 = 20; // [2,20] Пикселей подряд
#endregion
private byte Clamp2Byte(int iValue) //процедура , которая возвращает "0" если получается отрицательное значение переменной и "255" если больше 255
{
if (iValue<0) return 0;
if (iValue>255) return 255;
return (byte)iValue;
}//взята из Урока
void Render(Surface dst, Surface src, Rectangle rect)
{
ColorBgra PrimaryColor = (ColorBgra)EnvironmentParameters.PrimaryColor;
ColorBgra CurrentPixel;
ColorBgra VerifyPixel;
//ColorBgra FirstPixel;
//ColorBgra LastPixel;
int R,G,B;
int Rv, Gv, Bv;
//int Rf, Gf, Bf;
//int Rl, Gl, Bl;
int Xtec;
int Xmax;
int M;
M=0;
Xmax = rect.Right;
for (int y = rect.Top; y < rect.Bottom; y++)
{
// if (IsCancelRequested) return;
for (int x = rect.Left; x < Xmax; x++) //стандартный перебор -1 по координатам Х
{
Label asd;
asd:
M = M + 1;
if ((x+M)> rect.Right)
Xtec = x+M-rect.Right;
else Xtec = x+M;
CurrentPixel = src[x,y]; //присвоили переменной CurrentPixel текущий пиксель [x,y]
VerifyPixel = src[Xtec,y]; //присвоили переменной VerifyPixel текущий пиксель [x+1,y]
if (PrimaryColor.Bgra == CurrentPixel.Bgra)
{
if (CurrentPixel.Bgra == VerifyPixel.Bgra) //сравниваем эти переменные. (!=)-означает НЕ равно
{
goto asd;
}
}
if ((M-1)>=Amount4)
{
for (int j=0; j<M; j++)
{
if ((x + j) > rect.Right)
Xtec = x+j-rect.Right;
else Xtec = x+j;
#if DEBUG
Console.WriteLine({Xtec});
Console.ReadKey();
#endif
//// сдвиг гаммы цвета основного пикселя
//R = (int)CurrentPixel.R;
//G = (int)CurrentPixel.G;
//B = (int)CurrentPixel.B;
////R = R + Amount1;
////G = G -(Amount1 / 2);
////B = B -(Amount1 / 2);
//G = G + Amount2;
//R = R - (Amount2 / 2);
//B = B - (Amount2 / 2);
//B = B + Amount3;
//R = R - (Amount3 / 2);
//G = G - (Amount3 / 2);
//Debug.WriteLine (int Xtec);
VerifyPixel = src[Xtec,y]; //присвоили переменной VerifyPixel текущий пиксель [x+1,y]
// сдвиг гаммы цвета вспомогательного пикселя
Rv = (int)VerifyPixel.R;
Gv = (int)VerifyPixel.G;
Bv = (int)VerifyPixel.B;
Rv = Rv + Amount1;
Gv = Gv -(Amount1 / 2);
Bv = Bv -(Amount1 / 2);
Gv = Gv + Amount2;
Rv = Rv - (Amount2 / 2);
Bv = Bv - (Amount2 / 2);
Bv = Bv + Amount3;
Rv = Rv - (Amount3 / 2);
Gv = Gv - (Amount3 / 2);
// Собираем цвет заново по каналам R, G, and B с привлечением процедуры Clamp2Byte
//CurrentPixel = ColorBgra.FromBgra(Clamp2Byte(B),Clamp2Byte(G),Clamp2Byte(R),CurrentPixel.A);
VerifyPixel = ColorBgra.FromBgra(Clamp2Byte(Bv),Clamp2Byte(Gv),Clamp2Byte(Rv),CurrentPixel.A);
//dst[x,y] = CurrentPixel; //Записали собранный пиксель по координатам [x,y]
dst[Xtec,y] = VerifyPixel; //записали собранный пиксель по координатам [x+1,y]
}
}
M = 0;
}
}
}
Прошу сильно не ругать за корявость кода, я там уже и пытался как то вывести значения, чтобы отследить-ничего не вышло. (если кто знает-подскажите как это сделать)
В общем, буду рад любой помощи.))