как сделать снимок экрана с нормальным соотношением сторон в c # - PullRequest
0 голосов
/ 23 февраля 2012

У меня широкоэкранный монитор, и когда я делаю снимок экрана через Win API в C #, снимок будет широкимно я хочу сделать снимок с нормальным соотношением сторон 1: 1.Я не хочу сначала делать снимок, а затем изменить его размер, потому что элементы на изображении будут искажены.это возможно?

я использую этот код:

    public static Bitmap GetDesktopImage()
    {
        //In size variable we shall keep the size of the screen.

        SIZE size;


        IntPtr  hDC = PlatformInvokeUSER32.GetDC(PlatformInvokeUSER32.GetDesktopWindow()); 


        IntPtr hMemDC = PlatformInvokeGDI32.CreateCompatibleDC(hDC);


        do{
        size.cx = PlatformInvokeUSER32.GetSystemMetrics(PlatformInvokeUSER32.SM_CXSCREEN);

        size.cy = PlatformInvokeUSER32.GetSystemMetrics(PlatformInvokeUSER32.SM_CYSCREEN);



            m_HBitmap = PlatformInvokeGDI32.CreateCompatibleBitmap(hDC, size.cx, size.cy);

        } while (m_HBitmap == IntPtr.Zero);
        if (m_HBitmap!=IntPtr.Zero)
        {
            IntPtr hOld = (IntPtr) PlatformInvokeGDI32.SelectObject(hMemDC, m_HBitmap);

            PlatformInvokeGDI32.BitBlt(hMemDC,0, 0,size.cx,size.cy, hDC, 0, 0, PlatformInvokeGDI32.SRCCOPY);
            PlatformInvokeGDI32.SelectObject(hMemDC, hOld);
            PlatformInvokeGDI32.DeleteDC(hMemDC);
            PlatformInvokeUSER32.ReleaseDC(PlatformInvokeUSER32.GetDesktopWindow(), hDC);
            Bitmap res=System.Drawing.Image.FromHbitmap(m_HBitmap);
            PlatformInvokeGDI32.DeleteObject(m_HBitmap);
            return res;

        }

        return null;
    }

Ответы [ 2 ]

0 голосов
/ 23 февраля 2012

Вызовите GetWindowRect для дескриптора окна рабочего стола, чтобы получить размер.Я не думаю, что используемый вами вызов GetSystemMetric учитывает строку меню и тому подобное.

0 голосов
/ 23 февраля 2012

вам нужно будет обрезать часть экрана.Вы не можете конвертировать 16: 9 в 4: 3 без обрезки.

-OR-

Измените разрешение экрана на разрешение 4: 3, Сделайте снимок экрана, Измените его обратно.

...