zorrack
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору All Дело в том, что сейчас и так бъется экран на части и сравнивается каждая часть с предыдущей. В любом случае приходится пробежать через все куски (на данном этапе 8х8 или 16х16) и сравнить с предыдущим состоянием. Цитата: Наверное zorrack хочет сделать просмотр удалённого рабочего стола и не сильно нагружать сеть и свой комп, но он сильно будет пригружать удалённій комп | Задача даже не просто просмотра, а записи и последующего проигрывания. Метод записи/проигрывания уже готов. Требования к размеру цонечного файла - очень жесткие (т.е. сравнивается с такой системой как Funk Proxy). Вопрос состоит именно в том, какими методами обеспечить минимизацию сравняемого контента. Метод предложенный OdesitVadim: Цитата: Понятно, что если первая сумма поменялась, то считать дальше нет смысла | не совсем то, что нужно, поскольку нужно передавать и записывать ТОЛЬКО измененные блоки. Добавлено UncoNNecteD Цитата: в массив очень долго, надо работать с памятью. | На данном этапе: 1. Делаем скрин-шот 2. Получаем доступ к его битам (достаточно-таки долгая операция для целого десктопа - около 60-80мс для 1280х1024х24бит, Дюрон 600МГц, нВидиа ТНТ 32М) 3. Сравниваем поблоково с битами предыдущего скрин-шота 4. Измененные участки копируем в выделенный блок памяти (выделенный заранее с учетом максимально-возможного размера структуры). 5. Компрессируем нужный участок памяти 6. Отсылаем Идея по оптимизации: 0. Хукаем все вызовы ГДИ функций 0а. Информацию об области, к которой применялась ГДИ функция - сохраняем в списке 1. Вместо снятия полного скрин-шота - получаем только измененные прямоугольники (если перекрываются - прямоугольник который охватывает все перекрывающиеся). Вот вопрос именно состоит на счет 0 и 0а - как это возможно реализовать и каким образом получать информацию об обновленных участках, проверять - видимы ли они в данный момент и т.д. |