Hi,

Have resize the image to fit the picture box (for other purpose). now i tried to zoom in the image and i succeed on it. but my problem is when i zoom the image the image get zoomed and image moves toward right.

How can zoom the image without changing the position of the image.

Thanks in Advance....

//sz1 = (800, 600)
private Image resizeimage(Image my, Size sz1)
{
double ratio = 0d;
double myThumbWidth = 0d;
double myThumbHeight = 0d;
Bitmap bp;
int c;
int d;

if ((my.Width / Convert.ToDouble(sz1.Width)) > (my.Height /
Convert.ToDouble(sz1.Height)))
ratio = Convert.ToDouble(my.Width) / Convert.ToDouble(sz1.Width);
else ratio = Convert.ToDouble(my.Height) / Convert.ToDouble(sz1.Height);


myThumbHeight = Math.Ceiling(my.Height / ratio);
myThumbWidth = Math.Ceiling(my.Width / ratio);
Size thumbSize = new Size((int)myThumbWidth, (int)myThumbHeight);
bp = new Bitmap(sz1.Width, sz1.Height);
c = (sz1.Width - thumbSize.Width) / 2;
d = (sz1.Height - thumbSize.Height);
System.Drawing.Graphics g = Graphics.FromImage(bp);
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
rect = new Rectangle(c, d, thumbSize.Width, thumbSize.Height);
g.DrawImage(my, rect, 0, 0, my.Width, my.Height, GraphicsUnit.Pixel);
if (f == false)
{
sz = bp.Size;
pictureBox1.Size = sz;
}
rect = new Rectangle(0, 0, 0, 0);
return (bp);
// this will trigged when clicked on the picture box
public void ZoomIn()
{
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
if (sz.Width >=800* 4)
MessageBox.Show("Max ZoomIn");
else {
sz.Width += 100;
sz.Height += 100;

pictureBox1.Size = sz;
pictureBox1.Invalidate();
}

Edited 6 Years Ago by Nivass: n/a

Your ZoomIn method only changes the size of the PictureBox, it does not changes its Location. Therefore the top left corner of the PictureBox remains where it is and the right and bottom move by the change in size.
You need to adjust the Location property of the PictureBox (by negative half the change in size) to re-center the image.

Edited 6 Years Ago by nick.crane: n/a

I tried by adjusting the picture box location as below but it's not works. how to adjust it.

pictureBox1.Location = new Point(0,pictureBox1.Top - 5);

Edited 6 Years Ago by Nivass: n/a

Minus 5 is a small amount to test with. Try a bigger number.
Also, I think using Point.Offset like this will help;

Point pt = pictureBox1.Location;
pt.Offset(0, -50);
pictureBox1.Location = pt;

Edited 6 Years Ago by nick.crane: n/a

I discovered that if you use Inflate on a rectangle then it maintains its relative center position automatically so;

Rectangle rec = pictureBox1.Bounds;
rec.Inflate(50, 50);
pictureBox1.Bounds = rec;

This does the resize and automatically re-centers the pircturebox for you.

Comments
nice...hadn't tried inflate before :)
This question has already been answered. Start a new discussion instead.