PDA

View Full Version : سوال: تغيير سايز عكس و ساخت سطل رنگ برنامه paint



maryam.e
شنبه 12 دی 1394, 14:17 عصر
با سلام من از اين دستور براي تغيير سايز عكس در برنامه paint استفاده كردم مشكلش اينجاس كه فقط يك بار تصوير رو بزرگ ميكنه و ديگه هر چي كليك كنم تصوير تغيير نميكنه و همچنين با انتخاب يه ابزار ديگه ، تصوير به حالت اوليه برميگرده مشكلش از چيه من خودم فكر ميكنم چون تو كل برنامه از bmp استفاده ميشه وقتي يه ابزار ديگه رو انتخاب مي كنم اندازه bmp به حالت اوليه برميگرده

private void pictureBox1_Click(object sender, EventArgs e)
{
int h = bmp.Height;
int w = bmp.Width;
int rh = (int)(h * 2);
int rw = (int)(w * 2);
Bitmap temp = new Bitmap(rw, rh);
Graphics g1 = Graphics.FromImage((Image)temp);
g1.InterpolationMode = InterpolationMode.HighQualityBicubic;
g1.DrawImage(bmp, 0, 0, rw, rh);
g1.Dispose();
pictureBox1.Image = temp;
}

اين تابع هم براي ابزار سطل رنگ استفاده كردم كه وقتي در حالت اجرا از اين ابزار استفاده كنم برنامه كلا هنگ ميكنه

private void fill(Bitmap picture, int x, int y, Color bcolor)
{
if (x > 0 && x < picture.Width && y > 0 && y < picture.Height)
{
Point p = new Point(x, y);
Stack<Point> s = new Stack<Point>();
s.Push(p);
while (s.Count != 0)
{
p = s.Pop();
Color ccolor = picture.GetPixel(p.X, p.Y);
if (ccolor == bcolor)
{
picture.SetPixel(p.X, p.Y, ccolor);
s.Push(new Point(p.X - 1, p.Y));
s.Push(new Point(p.X + 1, p.Y));
s.Push(new Point(x, p.Y - 1));
s.Push(new Point(x, p.Y + 1));
}
}
}
}

توي رويداد picture ،mouse down ازش استفاده كردم

fill(bmp, e.X, e.Y, bmp.GetPixel(e.X, e.Y));
pictureBox1.Image = bmp;

ممنون ميشم راهنماييم كنين

zayens
شنبه 12 دی 1394, 14:44 عصر
اول اینکه s.Count هیچ وقت صفر نمیشه و حلقه میره توی بی نهایت و هنگی مال همونه
دوما برای زوم int ها را بجای لوکال ، جنرال کن
یه مقدار هم سرچ کنی کدش توی همین سایت هست
سوما کدهارو که پخش و پلا گذاشتی بنداز توی tag که موقع خوندن انقد بهم ریخته نباشه