Простое приложение Демонстрации экрана C#

Я надеюсь создавать очень простое приложение демонстрации экрана в C#. Никакое необходимое дистанционное управление. Я просто хочу, чтобы пользователь смог широковещательно передать их экран к веб-серверу.

Как я должен реализовать это? (Любой указатель в правильном направлении будет значительно цениться).

Это не должен быть высокий кадр/с. Было бы достаточно для ровного обновления когда-либо 5 с или около этого. Вы думаете, что было бы достаточно просто загрузить снимок экрана когда-нибудь 5 секунд к моему веб-серверу?

13
задан Andy Hin 20 July 2010 в 23:56
поделиться

3 ответа

Ранее я писал в блоге о том, как работает программное обеспечение для удаленного разделения экрана здесь, это не специфично для C#, но дает хорошее фундаментальное понимание темы. Также в этой статье есть ссылка на спецификацию буфера удаленного кадра, с которой вы также, вероятно, захотите ознакомиться.

В основном вы захотите делать скриншоты, и вы можете передавать эти скриншоты и отображать их на другой стороне. Вы можете сохранить последний снимок экрана и сравнить снимки экрана по блокам, чтобы увидеть, какие блоки снимка экрана вам нужно отправить. Как правило, перед отправкой данных выполняется некое сжатие.

Для удаленного управления вы можете отслеживать движение мыши, передавать его и устанавливать положение указателя на другом конце. То же самое можно сказать и о нажатии клавиш.

Что касается сжатия в C#, вы можете просто использовать JpegBitmapEncoder для создания скриншотов со сжатием Jpeg с нужным вам качеством.

JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.QualityLevel = 40; 

Для сравнения блоков файлов вам, вероятно, лучше всего создать хэш на старом блоке и новом, а затем проверить, одинаковы ли они. Для этого можно использовать любой алгоритм хэширования.

13
ответ дан 2 December 2019 в 00:02
поделиться

Ну, это может быть так же просто, как делать скриншоты, сжимать их, а затем отправлять по проводу. Однако существует программное обеспечение, которое уже делает это. Это для практики?

1
ответ дан 2 December 2019 в 00:02
поделиться

Вот код для создания снимка экрана без сжатия в виде растрового изображения:

    public static Bitmap TakeScreenshot() {
        Rectangle totalSize = Rectangle.Empty;

        foreach (Screen s in Screen.AllScreens)
            totalSize = Rectangle.Union(totalSize, s.Bounds);

        Bitmap screenShotBMP = new Bitmap(totalSize.Width, totalSize.Height, PixelFormat.
            Format32bppArgb);

        Graphics screenShotGraphics = Graphics.FromImage(screenShotBMP);

        screenShotGraphics.CopyFromScreen(totalSize.X, totalSize.Y, 0, 0, totalSize.Size,
            CopyPixelOperation.SourceCopy);

        screenShotGraphics.Dispose();

        return screenShotBMP;
    }

Теперь просто сожмите его и отправьте по сети, и все готово.

Этот код объединяет все экраны в многоэкранной настройке в одно изображение. При необходимости настройте.

2
ответ дан 2 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: