Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.08.2012, 23:40
zx230 zx230 вне форума
Прохожий
 
Регистрация: 08.08.2012
Сообщения: 13
Репутация: 10
По умолчанию Передача изображений между файлами

*ошибся в заголовке

Мне нужно создать связь между программами(!).

То есть одна программа должна предоставить другой - изображение (генерируется с интервалом 1 сек).
Как это лучше сделать?
(я думал писать изображение на диск в файл, а другая просто его скачивать. Но проблема в том что нет события конца записи на диск.)
Ответить с цитированием
  #2  
Старый 12.08.2012, 23:47
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от zx230
*ошибся в заголовке

Мне нужно создать связь между программами(!).

То есть одна программа должна предоставить другой - изображение (генерируется с интервалом 1 сек).
Как это лучше сделать?
(я думал писать изображение на диск в файл, а другая просто его скачивать. Но проблема в том что нет события конца записи на диск.)
Если у этих программ есть окна, то проще всего наверно с помощью сообщения WM_COPYDATA.
Ответить с цитированием
  #3  
Старый 13.08.2012, 00:01
zx230 zx230 вне форума
Прохожий
 
Регистрация: 08.08.2012
Сообщения: 13
Репутация: 10
По умолчанию

программы будут на разных языках, и работать на разных компах.
первая на делфи(которая будет отправлять изображения)
я думал сделать http сервер(делфи) и вторая просто скачивать изображение когда оно сохраниться, но походу тут трудности..
Ответить с цитированием
  #4  
Старый 13.08.2012, 00:02
wendstor wendstor вне форума
Прохожий
 
Регистрация: 13.10.2010
Сообщения: 30
Репутация: 11
По умолчанию

Также можно и через буфер, socket (если на разных машинах).
Ответить с цитированием
  #5  
Старый 13.08.2012, 00:04
wendstor wendstor вне форума
Прохожий
 
Регистрация: 13.10.2010
Сообщения: 30
Репутация: 11
По умолчанию

Обе программы на INDY. Первая клиент вторая сервер вот и всё, если в локалке то можно вообще использовать udp.
Ответить с цитированием
  #6  
Старый 13.08.2012, 00:10
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от zx230
программы будут на разных языках, и работать на разных компах.
первая на делфи(которая будет отправлять изображения)
я думал сделать http сервер(делфи) и вторая просто скачивать изображение когда оно сохраниться, но походу тут трудности..
Если программы на разных компах, то конечно WM_COPYDATA не пойдёт. Нужно использовать более сложные способы, например "Именованные трубы" (Named Pipes).
А в чём трудности при скачивании по http?
Ответить с цитированием
  #7  
Старый 13.08.2012, 00:20
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от zx230
...(я думал писать изображение на диск в файл, а другая просто его скачивать. Но проблема в том что нет события конца записи на диск.)
Почему же нет - Flush. Гарантировано делает запись, затем послать сообщение второй программе.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 13.08.2012, 09:22
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

CreateRemoteComObject
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #9  
Старый 13.08.2012, 09:38
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Можно через сообщения, через майлслоты, атомы, расшаренную память, можно у удаленного процесса вызвать метод класса. Я бы через вызов удаленной процедуры сделал и выдергивание картинки прямо из памяти процесса отправителя.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #10  
Старый 13.08.2012, 10:22
zx230 zx230 вне форума
Прохожий
 
Регистрация: 08.08.2012
Сообщения: 13
Репутация: 10
По умолчанию

спасибо за ответы. осталось только разобраться, что это все из перечисленного )
Ответить с цитированием
  #11  
Старый 19.08.2012, 21:32
zx230 zx230 вне форума
Прохожий
 
Регистрация: 08.08.2012
Сообщения: 13
Репутация: 10
По умолчанию

в продолжении темы. новый вопрос:

У меня есть компонент IdHTTPServer.
При запросе IdHTTPServer1CommandGet я отправляю с диска изображение:
IdHTTPServer1.ServeFile(AThread, AResponseInfo, ProgramPath+'\1.bmp');

А можно ли как то отправить изображение прямо из компонента image?
Ответить с цитированием
  #12  
Старый 15.10.2012, 13:16
iks iks вне форума
Прохожий
 
Регистрация: 15.10.2012
Сообщения: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от zx230
в продолжении темы. новый вопрос:

У меня есть компонент IdHTTPServer.
При запросе IdHTTPServer1CommandGet я отправляю с диска изображение:
IdHTTPServer1.ServeFile(AThread, AResponseInfo, ProgramPath+'\1.bmp');

А можно ли как то отправить изображение прямо из компонента image?

в данный момент столкнулся с этим и меня, тоже, заинтересовал этот вопрос...
Ответить с цитированием
  #13  
Старый 26.10.2012, 17:23
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от zx230
в продолжении темы. новый вопрос:

У меня есть компонент IdHTTPServer.
При запросе IdHTTPServer1CommandGet я отправляю с диска изображение:
IdHTTPServer1.ServeFile(AThread, AResponseInfo, ProgramPath+'\1.bmp');

А можно ли как то отправить изображение прямо из компонента image?
Цитата:
Сообщение от iks
в данный момент столкнулся с этим и меня, тоже, заинтересовал этот вопрос...
Вот так можно отправить изображение прямо из TImage:
Код:
procedure TForm1.IdHTTPServer1CommandGet(Thread: TIdPeerThread;
  RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo);
var
  sl: TStringList;
  gc: TGraphicClass;
  ext: String;
begin
.....
  if AnsiSameText(RequestInfo.Document, '/image1') then
  begin
    gc := TGraphicClass(Image1.Picture.Graphic.ClassType); // Получаем класс графического объекта в Image1
    ext := '.'+GraphicExtension(gc); // По этому классу определяем расширение файлов этого типа
    ResponseInfo.ContentType := IdHTTPServer1.MIMETable.GetFileMIMEType(ext); // По расширению получаем строку "Content-Type"
    ResponseInfo.ContentStream := TMemoryStream.Create; // Создаём новый поток
    Image1.Picture.Graphic.SaveToStream(ResponseInfo.ContentStream); // И выгружаем в него картинку из Image1
  end;
.....
end;
p.s. Естественно если заранее известно в каком формате картинка в Image1, то можно не "городить огород" с получением и переводом графического типа в "Content-Type", а сразу присваивать этот "Content-Type" в ResponseInfo.ContentType.
p.p.s. Так как это просто пример, то тут отсутствуют проверки на корректность. В рабочем коде их конечно же нужно добавить.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter