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();
}

Recommended Answers

All 4 Replies

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.

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);

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;

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.

commented: nice...hadn't tried inflate before :) +1
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.