469,603 Members | 2,117 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,603 developers. It's quick & easy.

GDI+ image maginfy

I've magnified an image on the form as following codes:

private void ViewForm_Paint(object
sender,System.Windows.Forms.PaintEventArgs e)
{
Point ulCorner = new Point( 0, 0);
e.Graphics.DrawImage(theImage,ulCorner);
}

private void menuZoomIn_Click(object sender, System.EventArgs e)
{
Graphics dc = this.CreateGraphics();
float rWidth = (float)(theImage.Width*1.5);
float rHight = (float)(theImage.Height*1.5);
dc.DrawImage(theImage,0F,0F,rWidth,rHight);
}

The issue is how to save the image magnified to itself as the form will
AutoRedraw according to its Form_Paint event. I think the key point is how to
get the magnified image on the form.
Any solutions?
Nov 16 '05 #1
1 1731
Hi
One way to do it is to capture the magnified image that is drawn on your
form as a new image. In other words, you magnify the image and draw some
where inside the form( and you mange to do that so far ) . What you can do
then is to capture that magnified drawn image from your window form (with
the help of an API function call) , what you need to get whoever is the
positions and dimensions of the image with in your form.
This code sample would capture all the form area to a jpg image.

[System.Runtime.InteropServices.DllImportAttribute( "gdi32.dll")]
private static extern bool BitBlt(
IntPtr hdcDest, // handle to destination DC
int nXDest, // x-coord of destination upper-left corner
int nYDest, // y-coord of destination upper-left corner
int nWidth, // width of destination rectangle
int nHeight, // height of destination rectangle
IntPtr hdcSrc, // handle to source DC
int nXSrc, // x-coordinate of source upper-left corner
int nYSrc, // y-coordinate of source upper-left corner
System.Int32 dwRop // raster operation code
);
Graphics g1 = this.CreateGraphics();
Image MyImage = new Bitmap(this.ClientRectangle.Width,
this.ClientRectangle.Height, g1);
Graphics g2 = Graphics.FromImage(MyImage);
IntPtr dc1 = g1.GetHdc();
IntPtr dc2 = g2.GetHdc();
BitBlt(dc2, 0, 0, this.ClientRectangle.Width,
this.ClientRectangle.Height, dc1, 0, 0, 13369376);
g1.ReleaseHdc(dc1);
g2.ReleaseHdc(dc2);
MyImage.Save(@"c:\Captured.jpg",
System.Drawing.Imaging.ImageFormat.Jpeg);
MessageBox.Show("Saved");

What you need to do to this code is to customize it to only capture the
area where the magnified image is. Hope that helps

Mohamed Mahfouz
MEA Developer Support Center
ITworx on behalf of Microsoft EMEA GTSC

Nov 16 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

4 posts views Thread by Michael Kennedy [UB] | last post: by
1 post views Thread by Paul E Collins | last post: by
5 posts views Thread by anonymous | last post: by
1 post views Thread by Prasad More | last post: by
7 posts views Thread by news | last post: by
8 posts views Thread by Philip Wagenaar | last post: by
2 posts views Thread by user | last post: by
reply views Thread by guiromero | last post: by
reply views Thread by gheharukoh7 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.