Кстати, самому стало интересно, как решается такая проблема средствами GDI+, и нашёл на Google пример, который работает аналогично примеру из книги Фленова.
private Region GetRegion(Bitmap _img, Color color)
{
Color _matchColor=Color.FromArgb(color.R,color.G,color.B);
System.Drawing.Region rgn= new Region();
rgn.MakeEmpty();
Rectangle rc=new Rectangle(0,0,0,0);
bool inimage=false;
for(int y=0; y <_img.Height;y++)
{
for(int x=0;x<_img.Width;x++)
{
if(!inimage)
{
if(_img.GetPixel(x,y)!=_matchColor)
{
inimage=true;
rc.X=x;
rc.Y=y;
rc.Height=1;
}
}
else
{
if(_img.GetPixel(x,y)==_matchColor)
{
inimage=false;
rc.Width=x-rc.X;
rgn.Union(rc);
}
}
}
if(inimage)
{
inimage=false;
rc.Width=_img.Width-rc.X;
rgn.Union(rc);
}
}
return rgn;
}
Источник примера
Хотя и самому не верится, что это оптимальный пока вариант.
We are the nobodies
Данное сообщение получено с сайта GotDotNet.RU
|