Q:

Why when cropping image i'm getting black image of the cropped image?

In form1 constructor
public Form1()
        {
            InitializeComponent();

            BackColor = Color.LightGreen;
            TransparencyKey = Color.LightGreen;
            this.TopMost = true;
            this.Location = new Point(0, 0);
            timer1.Enabled = true;
        }

Then:
private void Cap()
        {
            countImages++;            
            ScreenCapture sc = new ScreenCapture();            
            Image img = sc.CaptureScreen();
            Bitmap bmp = new Bitmap(img);
            Bitmap source = new Bitmap(this.Width, this.Height);
            Rectangle section = new Rectangle(new Point(source.Width, source.Height), source.Size);
            Bitmap CroppedImage = CropImage(source, section);
            CroppedImage.Save("c:\\temp\\screens\\" + countImages + ".gif", ImageFormat.Gif);
            source.Dispose();  
        }

And
public Bitmap CropImage(Bitmap source, Rectangle section)
        {
            // An empty bitmap which will hold the cropped image
            Bitmap bmp = new Bitmap(section.Width, section.Height);

            Graphics g = Graphics.FromImage(bmp);

            // Draw the given area (section) of the source image
            // at location 0,0 on the empty bitmap (bmp)
            g.DrawImage(source, 0, 0, section, GraphicsUnit.Pixel);

            return bmp;
        }

The Bitmaps i save to the hard disk:
CroppedImage.Save("c:\\temp\\screens\\" + countImages + ".gif", ImageFormat.Gif);

They are all black.
I want to crop this part from the image  and save it to the hard disk.
Example of screenshot and what i want to crop from it:
I marked with a red circle the transparent form1 and this is what i want to crop the part of the form1 and save this as cropped image the form1 part:

I tried this first:
private void CaptureDesktop()
        {
            countImages++;
            ScreenCapture sc = new ScreenCapture();                    
            Image img = sc.CaptureScreen();
            Bitmap bmp = new Bitmap(img);            
            Bitmap source = new Bitmap(this.Width, this.Height);
            Rectangle section = new Rectangle(new Point(source.Width, source.Height), source.Size);
            Bitmap CroppedImage = CropImage(bmp, section);
            CroppedImage.Save("c:\\temp\\desktopscreens\\" + countImages + ".gif", ImageFormat.Gif);
        }

But i'm getting this cropped image as result: Strange picture in picture ?

Then i tried this code:
using (Bitmap bmpScreenCapture = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
                                        Screen.PrimaryScreen.Bounds.Height))
            {
                using (Graphics g = Graphics.FromImage(bmpScreenCapture))
                {

                    g.CopyFromScreen(this.Location.X,
                                   this.Location.Y,
                                   0, 0,
                                   this.Size,
                                   CopyPixelOperation.SourceCopy);

                }

                Rectangle section = new Rectangle(new Point(this.Location.X, this.Location.Y), new Size(this.Width, this.Height));
                Bitmap CroppedImage = CropImage(bmpScreenCapture, section);
                CroppedImage.Save("c:\\temp\\desktopscreens\\1.bmp", ImageFormat.Bmp);

            }

But the result is:

Not what i wanted. I want only to crop the form1 part from the whole image.

A:

Try this (some code from Capture the screen shot using .NET)
 private void Cap()
    {
        using (Bitmap bmpScreenCapture = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
                                        Screen.PrimaryScreen.Bounds.Height))
        {
            using (Graphics g = Graphics.FromImage(bmpScreenCapture))
            {

                g.CopyFromScreen(this.Location.X,
                               this.Location.Y,
                               0, 0,
                               this.Size,
                               CopyPixelOperation.SourceCopy);

            }

            Rectangle section = new Rectangle(new Point(this.Location.X, this.Location.Y), new Size(this.Width, this.Height));
            Bitmap CroppedImage = CropImage(bmpScreenCapture, section);
            CroppedImage.Save("c:\\temp\\screens\1.bmp", ImageFormat.Bmp);

        }

    }

    public Bitmap CropImage(Bitmap source, Rectangle section)
    {
        // An empty bitmap which will hold the cropped image
        Bitmap bmp = new Bitmap(section.Width, section.Height);

        Graphics g = Graphics.FromImage(bmp);

        // Draw the given area (section) of the source image
        // at location 0,0 on the empty bitmap (bmp)
        g.DrawImage(source, 0, 0, section, GraphicsUnit.Pixel);

        return bmp;
    }

