Thứ Tư, ngày 21 tháng 7 năm 2010

// // Leave a Comment

C# Capture Control Graphics

Nếu bạn muốn chụp (capture) hay lưu lại hình ảnh của một controls bất kỳ mà bạn đã vẽ lên giao diện của nó, thì có một cách đơn giản đó là sử dụng thư viện "gdi32.dll" và phương thức BitBlt () cho phép bạn làm điều đó.

[DllImportAttribute("gdi32.dll")]
private static extern bool BitBlt(
IntPtr hdcDest,
int nXDest,
int nYDest,
int nWidth,
int nHeight,
IntPtr hdcSrc,
int nXSrc,
int nYSrc,
int dwRop);

BitBlt sẽ làm cho bạn tất cả, công việc của bạn bây giờ cung cấp cho nó các giá trị hiện thị (DC) thích hợp. Một cái DC là của Control cần lưu lại hình ảnh (ví dụ là toàn bộ form chẳng hạn), một cái là đích DC của bitmap

public Bitmap CaptureControl(Control control)
{
    Bitmap controlBmp;
    using (Graphics g1 = control.CreateGraphics())
    {
        controlBmp = new Bitmap(control.Width, control.Height, g1);
        using (Graphics g2 = Graphics.FromImage(controlBmp))
        {
            IntPtr dc1 = g1.GetHdc();
            IntPtr dc2 = g2.GetHdc();
            BitBlt(dc2, 0, 0, control.Width, control.Height, dc1, 0, 0, 13369376);
            g1.ReleaseHdc(dc1);
            g2.ReleaseHdc(dc2);
        }
    }

    return controlBmp;
}

Vậy là bạn đã có một bức ảnh bitmap, tuỳ bạn mà lưu trữ nó theo cách nào hoặc chế biến gì thêm là tuỳ.

0 comments: