PDA

View Full Version : زوم کردن روی عکس در مرکز عکس



moslem.hady
یک شنبه 15 مرداد 1391, 12:56 عصر
سلام دوستان
من تاپیک های مشابه رو دیدم ولی کمکی نکردن

من توی پروژه مثال که از لینک زیر میتونید دانلود کنید،روی یه عکس زوم کردم. با این کد:

Image newImage = Image.FromFile("view.png");
pictureBox1.Width = (int)(newImage.Size.Width / ZoomLevel);
pictureBox1.Height = (int)(newImage.Size.Height / ZoomLevel);

Bitmap img = new Bitmap(newImage, (int)((newImage.Size.Width) / ZoomLevel), (int)((newImage.Size.Height) / ZoomLevel));
pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
pictureBox1.Image = img;

برای اینکه کیفیت عکس در هربار زوم کم نشه، دوباره فراخونی کردم.

حالا مشکل اینه که من میخوام وقتی زوم میکنه در مرکز عکس زوم کنه.

فایل زیر رو دانلود کنید و کد من رو مشاهده کنید.

ممنون میشم راهنمایی کنید.
http://www.4shared.com/rar/OmbrhEcj/zoom.html
یا
http://www.mediafire.com/download.php?qp76qdxeo6lef47

the king
یک شنبه 15 مرداد 1391, 17:11 عصر
تقریبا هر چی نوشته بودید عوض شد :لبخند:

90808

moslem.hady
دوشنبه 16 مرداد 1391, 10:37 صبح
ممنون دوست عزیز. کمک خیلی بزرگی بود! 1 تشکر کمه! دمت گرم اینم یه بوس: :بوس: :چشمک: :لبخند:

فقط یه مشکل مسئله دیگه که دارم اینه که در کد قبلی که خودم نوشته بودم، توی تابع CreatePic که عکس رو به picturebox میدادم، یه سری با کد به عکس اضافه میکردم. که همیشه رو عکس باشن و با زوم کردم هم وری عکس بمونن. با این کد:

foreach (var Places in coordinates)
{
PictureBox pb = new PictureBox();
pb.Image = Image.FromFile("Icon.png");
pb.SizeMode = PictureBoxSizeMode.StretchImage;
int px = int.Parse(Places.X) / (int)ZoomLevel - 16 / (int)ZoomLevel;
int py = int.Parse(Places.Y) / (int)ZoomLevel - 32 / (int)ZoomLevel;

Point loc = new Point(px, py);
pb.Location = loc;

pb.BackColor = Color.Transparent;
pb.Width = 32 / (int)ZoomLevel;
pb.Height = 32 / (int)ZoomLevel;

pb.Click += new System.EventHandler(Coordinates_Click);
pb.Cursor = Cursors.Hand;

pictureBox1.Controls.Add(pb);
}
الان توی کدی که شما دادین اگه بخوام توی paint بذارم که نمیشه! چطور میشه این کار رو بکنم؟
اگه واضح نی بگین تا بیشتر توضیح بدم :)
مرسی

the king
دوشنبه 16 مرداد 1391, 16:16 عصر
ممنون دوست عزیز. کمک خیلی بزرگی بود! 1 تشکر کمه! دمت گرم اینم یه بوس: :بوس: :چشمک: :لبخند:

فقط یه مشکل مسئله دیگه که دارم اینه که در کد قبلی که خودم نوشته بودم، توی تابع CreatePic که عکس رو به picturebox میدادم، یه سری با کد به عکس اضافه میکردم. که همیشه رو عکس باشن و با زوم کردم هم وری عکس بمونن. با این کد:

foreach (var Places in coordinates)
{
PictureBox pb = new PictureBox();
pb.Image = Image.FromFile("Icon.png");
pb.SizeMode = PictureBoxSizeMode.StretchImage;
int px = int.Parse(Places.X) / (int)ZoomLevel - 16 / (int)ZoomLevel;
int py = int.Parse(Places.Y) / (int)ZoomLevel - 32 / (int)ZoomLevel;

Point loc = new Point(px, py);
pb.Location = loc;

pb.BackColor = Color.Transparent;
pb.Width = 32 / (int)ZoomLevel;
pb.Height = 32 / (int)ZoomLevel;

pb.Click += new System.EventHandler(Coordinates_Click);
pb.Cursor = Cursors.Hand;

pictureBox1.Controls.Add(pb);
}
الان توی کدی که شما دادین اگه بخوام توی paint بذارم که نمیشه! چطور میشه این کار رو بکنم؟
اگه واضح نی بگین تا بیشتر توضیح بدم :)
مرسی
چرا، اتفاقا هر چی که قراره روی اون PictureBox رسم بشه باید بره توی اون رخداد Paint
چیزی که من از کدتون متوجه میشم اینه که شما یکسری PictureBox کوچکتر رو روی اون pictureBox1 قرار می دهید، اما چون کد کامل تون رو ندارم
نمی دونم درست کار می کنه یا نه، به هر حال اینا تغییرات اند :


List<Rectangle> iconRects = new List<Rectangle>();

void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Rectangle src = new Rectangle(0, 0, img.Width, img.Height);
Rectangle dst = new Rectangle(basePoint.X, basePoint.Y
, (int)(img.Width * ZoomLevel), (int)(img.Height * ZoomLevel));
e.Graphics.DrawImage(img, dst, src, GraphicsUnit.Pixel);
Image ic = Image.FromFile("Icon.png");
src = new Rectangle(0, 0, ic.Width, ic.Height);
iconRects.Clear();
foreach (var Places in coordinates)
{
int px = int.Parse(Places.X) / (int)ZoomLevel - 16 / (int)ZoomLevel;
int py = int.Parse(Places.Y) / (int)ZoomLevel - 32 / (int)ZoomLevel;
dst = new Rectangle(px, py, 32 / (int)ZoomLevel, 32 / (int)ZoomLevel);
iconRects.Add(dst);
e.Graphics.DrawImage(ic, dst, src, GraphicsUnit.Pixel);
}
}

public void MouseisDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
foreach (Rectangle rect in iconRects)
{
if (rect.Contains(e.Location))
{
pictureBox1.Cursor = Cursors.Hand;
//Your Coordinates_Click Code.
return;
}
}
drag = true;
pictureBox1.Cursor = Cursors.Default;
x = e.X;
y = e.Y;
}

public void MouseMoves(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (drag)
{
LimitBasePoint(basePoint.X + e.X - x, basePoint.Y + e.Y - y);
x = e.X;
y = e.Y;
pictureBox1.Invalidate();
}
else
{
foreach (Rectangle rect in iconRects)
{
if (rect.Contains(e.Location))
{
pictureBox1.Cursor = Cursors.Hand;
return;
}
}
pictureBox1.Cursor = Cursors.Default;
}
}

moslem.hady
سه شنبه 17 مرداد 1391, 09:29 صبح
سلام. ممنون دوست عزیز
اولا من عذر میخوام، فراموش کردم توی تاپیک قبل سورس رو ضمیمه کنم!!
دوما کدی که نوشته بودین رو اعمال کردم کار نکرد!
توی این ضمیمه، سورس برنامه ایه که خودم نوشته بودم! مشکلش اینه که در مرکز زوم نمیشه! و اینکه با درگ کردن از کادر خارج میشه!
مرسی :)

rezam44
سه شنبه 25 تیر 1392, 19:07 عصر
خیلی جالبه..... :D

tooraj_azizi_1035
سه شنبه 25 تیر 1392, 19:22 عصر
http://stackoverflow.com/questions/11814770/zoom-center-of-image

rezam44
سه شنبه 25 تیر 1392, 19:48 عصر
http://stackoverflow.com/questions/11814770/zoom-center-of-image
؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟:متفکر: