Передача данных

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
AHDPE@ich
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 14.07.2008 (Пн) 10:25
Откуда: Ульяновск

Передача данных

Сообщение AHDPE@ich » 14.08.2010 (Сб) 16:49

Есть некий код, позволяющий отправлять файлы с одной машины на другую по сети. Конкретно, передается картинка. Фотографируется рабочий стол, сохраняется как jpeg, затем картинка с помощью Winsock перетекает на другой компьютер, где также сохраняется в файл, и только потом открывается и отображается на форме. процесс растянулся из-за постоянной работы с жестким диском. как сделать, чтобы данные из одного PictureBox на первом компе пересылались на второй в приложение, а затем сразу отображались?
Не хочешь - давай как хочешь, а хочешь, так давай!

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Передача данных

Сообщение FireFenix » 14.08.2010 (Сб) 17:33

Image -> сериализация в Byte() -> Winsok -> десиаризация Byte() -> Image -> PictureBox -> profit :)

картнка -> Byte() можно через GetBitmapBits или через замут с PropertyBag
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

AHDPE@ich
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 14.07.2008 (Пн) 10:25
Откуда: Ульяновск

Re: Передача данных

Сообщение AHDPE@ich » 15.08.2010 (Вс) 11:01

Так, с GetBitmapBits разобрался. Теперь, как я понимаю, "десериализацию" надо сделать через SetBitmapBits? Но PictureBox как был чистым, так и остался... да и попробовал записать на диск содержимое массива, вышло порядка 6 мегабайт, довольно много для передачи
Не хочешь - давай как хочешь, а хочешь, так давай!

AHDPE@ich
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 14.07.2008 (Пн) 10:25
Откуда: Ульяновск

Re: Передача данных

Сообщение AHDPE@ich » 15.08.2010 (Вс) 11:10

с PictureBox'ом разобрался, все отлично. Но размер переменной оставляет желать лучшего
Не хочешь - давай как хочешь, а хочешь, так давай!

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Передача данных

Сообщение FireFenix » 15.08.2010 (Вс) 11:38

Ну дык, непожатая картинка... Перед отправкой сжимай или кодируй в jpeg,png и после получения - обратно
Последний раз редактировалось FireFenix 15.08.2010 (Вс) 12:51, всего редактировалось 2 раз(а).
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

AHDPE@ich
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 14.07.2008 (Пн) 10:25
Откуда: Ульяновск

Re: Передача данных

Сообщение AHDPE@ich » 15.08.2010 (Вс) 11:55

:shock: как это несжатая...она изначально грузится из jpg файла.
Не хочешь - давай как хочешь, а хочешь, так давай!

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Передача данных

Сообщение FireFenix » 15.08.2010 (Вс) 12:25

AHDPE@ich писал(а)::shock: как это несжатая...она изначально грузится из jpg файла.

То что она грузиться из jpeg - это не значит, что она в памяти лежит как jpeg

jpg, png, tiff, etc -> bmp -> picturebox.picture -> bmp -> jpg, png, tiff, etc
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

AHDPE@ich
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 14.07.2008 (Пн) 10:25
Откуда: Ульяновск

Re: Передача данных

Сообщение AHDPE@ich » 15.08.2010 (Вс) 12:36

все, понял, спасибо. переконвертировал bmp в jpg :)
Не хочешь - давай как хочешь, а хочешь, так давай!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Передача данных

Сообщение Хакер » 15.08.2010 (Вс) 12:39

И радуется. Что-ж тут хорошего? Худший выбор.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

AHDPE@ich
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 14.07.2008 (Пн) 10:25
Откуда: Ульяновск

Re: Передача данных

Сообщение AHDPE@ich » 15.08.2010 (Вс) 12:58

посоветуйте вариант лучше? для расширения кругозора хотя бы
Не хочешь - давай как хочешь, а хочешь, так давай!

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Передача данных

Сообщение FireFenix » 15.08.2010 (Вс) 13:05

Передавать изображение только изменённой части рабочего стола, а не всего
Использовать формат сжатия без потери качества... типа png...
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

AHDPE@ich
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 14.07.2008 (Пн) 10:25
Откуда: Ульяновск

Re: Передача данных

Сообщение AHDPE@ich » 15.08.2010 (Вс) 13:17

сжатие пятидесятипроцентное, неплохо видно. наверное, критика касалась чего-то другого :?
Не хочешь - давай как хочешь, а хочешь, так давай!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Передача данных

Сообщение Хакер » 15.08.2010 (Вс) 13:32

Критика касалась использования сжатия с потерями (которое отпатимально для фотографий), вместо PNG-подобного (которое оптимально для окон и скриншотов).

А ещё критика касалась самой идеи передачи картинки вместо передачи GDI-команд.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

AHDPE@ich
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 14.07.2008 (Пн) 10:25
Откуда: Ульяновск

Re: Передача данных

Сообщение AHDPE@ich » 15.08.2010 (Вс) 13:35

Хакер писал(а): А ещё критика касалась самой идеи передачи картинки вместо передачи GDI-команд.


подробнее можно?
Не хочешь - давай как хочешь, а хочешь, так давай!

AHDPE@ich
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 14.07.2008 (Пн) 10:25
Откуда: Ульяновск

Re: Передача данных

Сообщение AHDPE@ich » 15.08.2010 (Вс) 13:44

Прочел топик
viewtopic.php?f=1&t=32664&start=0&st=0&sk=t&sd=a

стало более-менее понятно насчет GDI-команд :)
сразу вопрос: насколько сложно реализовать передачу команд и их обработку?
Не хочешь - давай как хочешь, а хочешь, так давай!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Передача данных

Сообщение Хакер » 15.08.2010 (Вс) 13:50

Откуда я знаю, насколько лично тебе это сложно?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

AHDPE@ich
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 14.07.2008 (Пн) 10:25
Откуда: Ульяновск

Re: Передача данных

Сообщение AHDPE@ich » 15.08.2010 (Вс) 13:53

ну да, согласен. некорректный вопрос... тогда так: где можно почитать про основы работы с GDI?
Не хочешь - давай как хочешь, а хочешь, так давай!

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Передача данных

Сообщение FireFenix » 15.08.2010 (Вс) 14:05

http://www.google.ru

Можно попробовать обычное рисование массива, которое можно посмотреть здесь viewtopic.php?t=30324 (предпоследний пост)
Последний раз редактировалось FireFenix 15.08.2010 (Вс) 14:24, всего редактировалось 2 раз(а).
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Передача данных

Сообщение Хакер » 15.08.2010 (Вс) 14:08

AHDPE@ich писал(а):где можно почитать про основы работы с GDI?

http://msdn.microsoft.com/en-us/library ... 85%29.aspx

FireFenix писал(а):рисование массива можно посмотреть здесь viewtopic.php?t=30324 (предпоследний пост)

А это не нужно для подхода с передачей команд.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Передача данных

Сообщение FireFenix » 15.08.2010 (Вс) 14:38

Хакер писал(а):А ещё критика касалась самой идеи передачи картинки вместо передачи GDI-команд.

Немного нубский вопрос...

Рационально ли вообще передавать GDI команды?
Поидее ведь после запуска некоторого количества приложений, которые рисуются на экране - объём GDI сообщений будет превышать объём сжатой картинки изменённой части экрана
Или если рисуется сложная композиция из полигонов заполняемых растром с альфой, то трафик может быть равен или даже превышать трафик картинки

Не?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Передача данных

Сообщение Хакер » 15.08.2010 (Вс) 15:36

Нет.

Во-первых, GDI команды вызывают не от нефиг делать, а по запросу валидации инвалидированной области. Ну или в случае анимации. Если ничего не происходит, то никаких GDI-команд нет.

Потом, например, сдвинули мы окно из одного места в другое. Или прокрутили что-то прокручивающееся. Изменения имеют место быть. Работая с видом как с картинкой вычислить такие изменения довольно сложно (без анализа образов — практически невозможно).

А с точки зрения GDI-команд сдвиг окна или прокрутка какой-то области — это всего лишь вызов ScrollWindowEx. Надо транслировать его, и прокрученная часть просто сдвинется на целевой машине.

Иными словами, смотри:
а) Передать информацию «сдвинуть такой-то прямоугольный растр в такое-то новое место». Это 6 параметров.
б) Иметь две картинки и пытаться каким-то неведомым образом сравнивая их — определить, какие прямоугольники и куда были сдвинуты. Максимум, что можно легко вычислить — какие многоуольники изменились. И передавать изменённые данные. Это значит, что будут заново переданы все сдвинутые хоть на 1px точки, несмотря на то, что все эти точки, вернее информация о них уже есть на целевой машине.

Что касается изменений вообще: это либо сдвиги и копирования (Blt-функции), либо простая геометрия (перья и кисти), либо рисование предзагруженных ресурсов (иконок, битмапов и т.д.). Гораздо лучше вместо передачи изменений хранить информацию обо всех этих сущностях (созданных кистях, перьях, загруженных иконках, битмапах) на целевой машине и рисовать ими там же (на целевой).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Передача данных

Сообщение FireFenix » 15.08.2010 (Вс) 16:09

Насчёт количества сущностей я наверное преувеличил... пока не встречал приложений камикадзе, где на каждый пиксель - сущность...
И насчёт операций над сущностями - тоже верно!

Но если возьмём рабочий стол с обоиной и будем показывать полупрозрачную форму (в которой 90% места занимают картинки/значки), то нам нужно будет передать картинку рабочего стола, картинки ярлычков раб.стола и прямоугольник/регион формы со всеми его сущностями
В этом случае поидее должно передаться больше информации... Наверное это также касается Aero, хотя может оно работает и по другому

И как я понимаю, при передачи GDI команд, в приложениях типа видео-плеера, игр, 3д редакторов и т.д. работающих с DirectX, OpenGL мы получим квадрат малевича?

И ещё интересно, вроде как WPF (собсно VS её использует) приложения сразу рисуют через DX, то при просмотре таких приложений мы тоже ничего не увидим?
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Передача данных

Сообщение Хакер » 15.08.2010 (Вс) 16:37

FireFenix писал(а):В этом случае поидее должно передаться больше информации...

Откуда больше информации-то?

FireFenix писал(а):И как я понимаю, при передачи GDI команд, в приложениях типа видео-плеера, игр, 3д редакторов и т.д. работающих с DirectX, OpenGL мы получим квадрат малевича?

Вероятно.

FireFenix писал(а):И ещё интересно, вроде как WPF (собсно VS её использует) приложения сразу рисуют через DX, то при просмотре таких приложений мы тоже ничего не увидим?

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

Но и с DX есть выход: перехватывать DX-общения и транслировать их на целевую машину и выполнять над созданным там DX-устройством.

С OpenGL всё гораздо лучше: там грамотная архитектура, которая заранее предусматривает, что GL-команды (официальный термин, прошу заметить) вызываются на одной стороне, а выполняются — на другой. Более того, там GL-команды могут записываться в списки, списки могут вызываться как одна команда, а вызовы списков могут быть записаны в другие списки. Если приложение грамотное и написано с использованием списков, то тут всё очень позитивно: GL-трафик будет минимальный.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Передача данных

Сообщение FireFenix » 15.08.2010 (Вс) 17:08

Хакер писал(а):
FireFenix писал(а):В этом случае поидее должно передаться больше информации...

Откуда больше информации-то?

Возьмём:
Рабочий стол 1024*768 (полное растягивание обоины)
10 Ярлычков 64*64
Форма 300*300 в которой 6 ярлычков 64*64

Юзер из фуллскрина выходит на рабочий стол с полупрозрачной формой...

Взяв грубо (без учёта Пуск и других плюшек), получилось:

GDI Комманды, т.е. контент сущностей GDI:
1) Сущность 1024*768 ~ 786к пикселей
2) 10 cущностей 10*64*64 ~ 41к пикселей
3) Форма с 6ью сущностями 6*64*64 ~ 25к пикселей
Суммарно = 786к + 41к + 25к = 852к пикселей
RGBA 32bit = 852к * 4 = 3408 Кб ~ 3,5Мб

Фреймы:
Целая картинка RGBA 32bit 1024*786*4 ~ 3,14Мб (Почти число пи :shock:)
Но т.к. на не нужна альфа, мы можем использовать RGB 24bit 1024*768*3 ~ 2,36 Мб
32bit PNG из 2,36Мб дало 1,08Мб

Не знаю, сжимает ли GDI растр при передаче... но итого мы получили GDI 3.5Mb против Фреймов 2,36Мб -> 1,08Мб

Я не прав?

Т.е. у GDI пиковая загрузка канала выше, но половины работы загрузка канала в минмуме, когда у фреймов почти одинаковый поток всё время и на прилично ниже пиковой GDI

Но и с DX есть выход: перехватывать DX-общения и транслировать их на целевую машину и выполнять над созданным там DX-устройством.
С OpenGL всё гораздо лучше: там грамотная архитектура, которая заранее предусматривает, что GL-команды

Ну тут ведь тоже ресурсозатратно, мало того что нам надо уже перебросить 3х мерные каркасы, текстуры, шейдеры... Так нам нужно ещё и железо способное обработать

Поидее пересылка фреймов должна быть выгоднее
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Передача данных

Сообщение Хакер » 15.08.2010 (Вс) 18:39

Ну у тебя фреймы передаются каждый раз, а у меня сущности — единожды.

Да и что за ярлыки 64×64 при таком разрешении?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 84

    TopList