Слово «лучший» в лучшем случае является субъективным термином: -)
Если вы говорите о скорости, то это зависит от размера растрового изображения. С локальной сетью, работающей на скорости 100 Мбит / с, вы можете ожидать примерно 1 секунду для каждых 10 МБ файла. Для небольшого файла просто передайте его как есть. При некотором размере файла стоит сжать файл, передать его и разархивировать на другом конце, просто потому, что загрузка ЦП выполняется быстрее, чем загрузка сети.
Но я думаю, что вы будете говорить о довольно больших файлах, чтобы сделать это дополнительное кодирование полезным.
Обновление:
Поскольку вы говорите о кадре захвата экрана, скажем, мы находимся в 1280x1024, 32bpp. Полный экран будет занимать 5M, что должно передаваться через 100 Мбит / с в локальной сети за секунду (если позволяет другой сетевой трафик). На мой взгляд, не стоит больше пытаться ускорить это, поскольку накладные расходы на сжатие перевесят экономию во времени.
Если вы будете передавать видео , это другое дело. Тогда вы не будете отправлять новое изображение для каждого кадра - вы будете обрабатывать дельты и передавать только эту информацию, полагаясь на тот факт, что экран, как правило, только немного меняется в каждом кадре.
Это зависит от того, для чего вы собираетесь использовать изображения. Один снимок экрана, просто отправьте двоичную информацию. Что-нибудь еще, ну, вам нужно дать нам больше деталей.
Для передачи видео мы на самом деле проделали некоторую работу над различными методами сжатия.
Самое простое, на что вы можете посмотреть - это разделить экран на (например, матрицу 16x16) и передать только измененные элементы.
Так, например, каждый кадр будет состоять из 256-битной битовой маски, указывающей, какие элементы изменились. Затем за этой битовой маской следуют сами элементы.
Этот алгоритм означает, что наименьшая дельта кадра составляет 32 байта (если экран не изменился). Самый большой размер всего на 32 байта больше, чем у полноэкранного дампа.
Один из других методов, которые мы использовали, состоял в том, чтобы просто сохранить изменившиеся положения верхнего и нижнего правого точек пикселя и передать эти два значения вместе со всем прямоугольником, ограниченным ими.
Без сомнения, есть и другие методы, которые вы могли бы использовать, даже динамический выбор метода для каждого кадра для обеспечения минимального размера дельты.