PDA

View Full Version : رنگ کردن اشکال گرافیکی



mst2008
شنبه 20 بهمن 1386, 10:33 صبح
با سلام .

می خوام اشکال گرافیکی را رنگ بکنم یعنی اگر موس را داخل خط بسته مثلاً دایره کلیک کنم فقط داخل دایره رنگ شود. لطفا کدهای مربوط به این کار را برام بنویسید.

کسی میتونه کمکم کنه؟

با تشکر

Mah6447
یک شنبه 28 بهمن 1386, 07:40 صبح
اشکال هندسی را چگونه می کشی ؟ آیا از ابزار Shape خود دلفی استفاده می کنی ؟

devildarkness
یک شنبه 28 بهمن 1386, 08:56 صبح
سلام

خوب این الگوریتم رو دیشب نوشتم برای پروژه گرافیک ام، به زبون #C اما اگه یکم نگاهش کنی میتونی به delphi تبدیلش کنی. الگوریتمیه که استادمون برای رنگ کردن نواحی معرفی کرده. البته یکم کنده. که دنبال پیدا کردن سریع ترش هستم. پیدا کردم اون الگوریتم رو هم می نویسم میزارم اینجا.

خوب اینم کد:



private Graphics graphicEngine;
private pictureBox workBox;

public void fillArea(Point pixel, Color newColor)
{

Bitmap b = new Bitmap(workBox.Image);
Stack s = new Stack();

Color bg = b.GetPixel(pixel.X, pixel.Y);

if (newColor.ToArgb() == bg.ToArgb())
{
return;
}

b.SetPixel(pixel.X, pixel.Y, newColor);

s.Push(pixel);
while (s.Count > 0)
{
pixel = (Point)s.Pop();

if (b.GetPixel(pixel.X + 1, pixel.Y) == bg)
{
b.SetPixel(pixel.X + 1, pixel.Y, newColor);
s.Push(new Point(pixel.X + 1, pixel.Y));
}

if (b.GetPixel(pixel.X - 1, pixel.Y) == bg)
{
b.SetPixel(pixel.X - 1, pixel.Y, newColor);
s.Push(new Point(pixel.X - 1, pixel.Y));
}

if (b.GetPixel(pixel.X, pixel.Y + 1) == bg)
{
b.SetPixel(pixel.X, pixel.Y + 1, newColor);
s.Push(new Point(pixel.X, pixel.Y + 1));
}

if (b.GetPixel(pixel.X, pixel.Y - 1) == bg)
{
b.SetPixel(pixel.X, pixel.Y - 1, newColor);
s.Push(new Point(pixel.X, pixel.Y - 1));
}
}
graphicEngine.DrawImageUnscaled(b, new Point(0, 0));
workBox.Refresh();

}

Mo1659
دوشنبه 29 بهمن 1386, 03:18 صبح
بهترین راه حل اینه که اول اول محدوده شکلت را حساب کنی مثلا اگه یک مثلث کشیدی مختصات 3 ضلعش را به دست بیاری بعد مثلا توی رویداد on mouse move فرمت (اگه شکل روی فرم) با چتد تا دستور شرطی محدوده حرکت mouse را محدود به این مختصات بکنی .با این کار موست فقط داخل این مثلث حرکت میکونه و بیرون نمیاد بعد دستورات مربوط به رنگ کردن را وارد کن.