Форум программистов, компьютерный форум, киберфорум
Delphi: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/16: Рейтинг темы: голосов - 16, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 30.08.2011
Сообщений: 12

Как отправить/принять jpeg через winsock ?

30.08.2011, 09:31. Показов 3356. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
стоит задача передачи снимков экрана от компьютера к компьютеру. В случае с bmp cоздаю TBitmap, помещаю картинку туда, заполняю ему BitmapInfo, далее при передаче функцией send пересылаю размер картинки, который можно посчитать (ширина Х высота Х кол-вобитнацвет) + BitmapInfo, затем следует цикл с посылками по 1000 байт пока все не передастся, на том конце приняв данные из них собирается ф-ией setdibits картинка bmp, но ума не приложу КАК тоже самое провернуть с jpeg-ом, прошу помочь
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.08.2011, 09:31
Ответы с готовыми решениями:

winsock - принять несколько клиентов, (не получается)
winsock - принять несколько клиентов, (не получается) добрый день, никак не могу принять несколько клиентов на сервер. принимается только...

Как через webbrowser отправить письмо?
знаю что можно чеоез smtp. только мне надо именно через webbrowser

Как отправить POST-запрос через функцию?
Здравствуйте,подскажите как можно отправить POST запрос через функцию. Пробовал так,но не получается, все переменные объявлены ...

6
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
30.08.2011, 09:48
Добавте модуль JPEG в Uses;
Создайте обект, засуньте в него файл, создайте TBitmap и поместите из Jpeg в TBitmap.
Передавайте.
На выходе получите BMP-файл, обратной конвертацией сохраняете. Получаем JPG-файл.
0
1 / 1 / 0
Регистрация: 30.08.2011
Сообщений: 12
30.08.2011, 14:04  [ТС]
Цитата Сообщение от Андрей Борисови Посмотреть сообщение
Добавте модуль JPEG в Uses;
Создайте обект, засуньте в него файл, создайте TBitmap и поместите из Jpeg в TBitmap.
Передавайте.
На выходе получите BMP-файл, обратной конвертацией сохраняете. Получаем JPG-файл.
я как раз не хочу передавать по сети тяжелый bmp, а хочу легкие jpg пересылать
0
 Аватар для ElKornacio
5 / 5 / 0
Регистрация: 31.08.2011
Сообщений: 7
31.08.2011, 14:46
Попробуйте работать иначе. Делаем скрин в TBitmap. После этого в TJPEGImage его копируем(через Assign), создаём стрим(TMemoryStream) и в него записываем через SaveToStream. Данные из стрима передаём по сети. На том конце, читаем переданные данные в стрим, создаём TJPEGImage, и использую LoadFromStream загружаем изображение. В итоге - мы сфоткали, сохранили в памяти жпег, передали его, и загрузили из памяти)
1
1 / 1 / 0
Регистрация: 30.08.2011
Сообщений: 12
01.09.2011, 09:43  [ТС]
Цитата Сообщение от ElKornacio Посмотреть сообщение
Попробуйте работать иначе. Делаем скрин в TBitmap. После этого в TJPEGImage его копируем(через Assign), создаём стрим(TMemoryStream) и в него записываем через SaveToStream. Данные из стрима передаём по сети. На том конце, читаем переданные данные в стрим, создаём TJPEGImage, и использую LoadFromStream загружаем изображение. В итоге - мы сфоткали, сохранили в памяти жпег, передали его, и загрузили из памяти)
до слов данные из стрима передаем по сети понятно что делать, а дальше нет не знаю как через сокет это сделать, в случае с бмп шлю данные из буфера функцией send(), причем явно указывая размер каждой посылки и размер всего буфера. совместимы ли вообще эти вещи, stream и его отсыл через send() ? и прием стрима через recv() ? В примерах из интернета стрим тесно ходит с готовыми компонентами, кторые я не использую и вписать их в существующий проект не представляю возможным, все построено на winsock.
0
 Аватар для ElKornacio
5 / 5 / 0
Регистрация: 31.08.2011
Сообщений: 7
01.09.2011, 18:42
Не помню, какие именно параметры у сенд и рецв, но у стрима есть доступ к памяти через Stream.Memory. Пишите что-то в духе send(Stream.Memory^, Stream.Size, 0), и на сервере recv(Stream.Memory^, Stream.Size, 0); но перед этим вам ещё надо передать размер, чтобы его указать перед принятием стрима)
1
1 / 1 / 0
Регистрация: 30.08.2011
Сообщений: 12
05.09.2011, 09:59  [ТС]
Цитата Сообщение от ElKornacio Посмотреть сообщение
Не помню, какие именно параметры у сенд и рецв, но у стрима есть доступ к памяти через Stream.Memory. Пишите что-то в духе send(Stream.Memory^, Stream.Size, 0), и на сервере recv(Stream.Memory^, Stream.Size, 0); но перед этим вам ещё надо передать размер, чтобы его указать перед принятием стрима)
Отлично! только что заработало, благодарю вас!
все в точности так кроме разве что принимаю через recv сначала в буфер, а затем уже из буфера заполняю стрим, сразув стрим не знаю как да и не важно, радости полно))
приведу все же часть кода,
отсыл:
jpg := TJpegImage.Create;
jpg.LoadFromFile('orig.jpg');
stream:=TMemoryStream.Create;
jpg.SaveToStream(Stream);
jpg.Free;
if send(ClientInformation.Socket, stream.memory^ , 2502, 0) = SOCKET_ERROR then
//вывод кода ошибки
begin
err:=WSAGetLastError;
ShowMessage('socket error. '+IntToStr(err));
end;

прием:
jpg := TJpegImage.Create;
stream:=TMemoryStream.Create;
GetMem(buf, 2502); //2502 просто фиксированный размер посылки, птому что заранее знаю сколько придет, а в программ уже сделаю отдельную передачу размера до передачи самого jpeg-а
res := recv(Params^.Socket, pointer(integer(buf))^, 2502, 0); //тут не пишу, смотрю если res=-1 вывожу код ошибки сокета.
stream.Position:=0;
stream.WriteBuffer(pointer(integer(buf)) ^, 2502);
form1.Label4.Caption:='stream.size = '+inttostr(stream.Size); //просто показал размер
stream.SaveToFile('orig.jpg'); //ВОТ ОНО!
freemem(buf);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.09.2011, 09:59
Помогаю со студенческими работами здесь

Как отправить такой post запрос через синапс?
Фото ниже. Можно и через инди, но лучше синапс. Именно такой надо. Все данные для запроса у меня есть у меня есть. Мне только правильно...

Картинки, jpeg через сокет
Не знаю в чем проблема, поэтому не знал где создавать тему: в графике или сетях. Вообщем передаю что-то типа потокового видео через...

Послать/принять динамический Record через сокеты
Здравствуйте! Мне нужна Ваша помощь. Я не могу понять, как передать динамическую структур через сокет. Пример: TArray_Data = packed...

Как передать и принять файл в сети средствами WinSock ?
всем привет! никто не подскажет как передать и принять файл в сети средствами WinSock ???

Отправить команду на устройство, подключенное к компьютеру через ethernet, и принять от него ответ
Здравствуйте, возникла проблема в подборе материала и примеров выполнения программы по работе с ethernet Собственно есть устройство...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru