Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
2 / 2 / 0
Регистрация: 18.08.2015
Сообщений: 48

Оптимизация изображения для сохранения (и очень частого обновления) в БД

18.08.2015, 10:25. Показов 1175. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет,

Предистория: На днях я загорелся идеей изобретения велосипеда А именно решил написать программу для удаленного доступа. Чисто для собственного развития))

Тут 2 задачи:
  1. передача и воспроизведение действий (тут проблем нет, все просто)
  2. синхронизация скрина экрана (А вот тут беда...)
Скрин надо передовать как можно чаще, ну хотябы 3-5 раз в секунду. И Тут встает проблема огромного объема трафика , следовательно, необходимость очень сильной оптимизации изображения.
Требования к качеству изображения минимальные (главное чтобы читалось), а вот размер сторон менять нельзя.

Попытка решения:
Путем изменения "PixelFormat" уменьшил скрин 1600х1200 до 100кб в Png.
Далее думал перевести бинарный код в String и разбить на N кусков , например, по 200 символов.
Каждый этот кусок хранить в БД в отдельной строке и при необходимости записи нового скрина сравнивать текущие куски с предыдущими(их хранить в переменной с прошлого шага) и отправлять в БД только измененные.

Но при сравнивании, даже если на скрине изменились только несколько цифр в одной строке, несовпадений кусков около 90 %, выходит что толку от такого подхода нет.
Подскажите, пожалуйста, как можно еще оптимизировать изображение. Или в чем моя ошибка.

Вот функция получения скрина и перевода его в String:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        public Image ScreenToImage(System.Drawing.Imaging.PixelFormat px_format)
        {
            //получаем скрин
            Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            Graphics g = Graphics.FromImage(bmp);
            g.CopyFromScreen(0, 0, Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
            //Применяем формат пикселей
            Bitmap img = bmp.Clone(new Rectangle(0, 0, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height), px_format);
            return img;
        }
        public string ImageToBase64(Image image, System.Drawing.Imaging.ImageFormat format)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                // Convert Image to byte[]
                image.Save(ms, format);
                byte[] imageBytes = ms.ToArray();
                // Convert byte[] to Base64 String
                string base64String = Convert.ToBase64String(imageBytes);
                return base64String;
            }
        }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.08.2015, 10:25
Ответы с готовыми решениями:

Необходимость частого обновления dataGridView при частом обновлении данных в источнике
Платформа Microsoft .NET Framework 3.0 БД Oracle 11g Подключение к БД через ODAC 11.2 Release 3 (11.2.0.2.1) Добрый день, мне...

LINQ to XML. Оптимизация метода для сохранения документа
В общем имеем такой метод: public void SaveColection(List<Post> postList, string path) { var doc = new...

Как создать DataAdapter для возможности сохранения (обновления) данных
Делаю так, отдельной процедурой гружу таблицы в Dataset: Private Sub LoadTable(ByVal TableName As String) Dim DA As New...

3
2 / 2 / 0
Регистрация: 18.08.2015
Сообщений: 48
02.11.2015, 07:14  [ТС]
Помогите пожалуйста!
Неужели вообще никаких идей нет?
0
Эксперт .NET
 Аватар для Rius
13238 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,558
Записей в блоге: 14
02.11.2015, 08:51
БД не нужно. Base64 тоже. Сравнивайте копию экрана с ранее сохранённой в памяти копией по байтам.
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
02.11.2015, 10:36
Для передачи скринов, - как написали выше - передача лишь изменившейся части,
программы для УД - так поступают (плюс, естественно, сжатие и\или понижение качества).
Обычно вырубается Aero и включается упрощенный стиль в винде на клиенте.

Возможно, передачу скринов можно сделать по UDP протоколу(промаркировать пакеты данных по очередности не забудь) (могу ошибаться).
Действия, клики итд - по TCP.

Добавлено через 6 минут
http://habrahabr.ru/post/142617/
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2015, 10:36
Помогаю со студенческими работами здесь

Плагин для сохранения изображения с галереи
Ищу плагин который добавит кнопку "Сохранить" под изображением при просмотре галереи или фото в полном размере.

Оптимизация сохранения
Доброго времени суток. У меня на форме есть 35 combobox'ов мне нужно сохранить их значения в текстовый файл. Ну не писать же 35...

Ошибка открытия, обновления и сохранения Excel в фоне
Нужно открывать excel в фоне, обновлять все связи (они к вьюшкам sql, не быстро), сохранять, и закрывать Скриптов в инете много, взял за...

Какую структуру данных лучше всего использовать для частого к ней обращения?
Есть большая база данных (просто слова), к ней регулярно выполняются обращения с целью поиска элемента. Так вот, я думаю что лучше всего...

Написать свой компонент для частого использования в дальнейшем — редактор с двумя кнопками
Нужно написать свой компонент для частого использования в дальнейшем - редактор с двумя кнопками и одной текстовой строкой описания....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru