GDI+ image maginfy

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

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?
 
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
 
Back
Top