Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передача изображения по локальной сети [D6, Win95/98]


Страницы:   1 2

Dublicator ©   (2004-05-09 10:56:00) 

Необходимо передать изображение рабочего стола по сети.Подскажите наиболее быстрый способ(необходимо,чтобы изображение обновлялось постоянно).Заранее благодарен!


Dublicator   (2004-05-14 16:35:00) [1]

А как по UDP реализовать?


Nic2   (2004-05-14 16:24:00) [2]

Спасибо, работает.
А в чем прикол при передаче JPGа? Делаю:
передача
<--------------------------------------->
MS:=TMemoryStream.Create;
JPG := TJPEGImage.Create;
Canva := TCanvas.Create;
B := TBitmap.Create;
DC := GetDC(0);
try
 Canva.Handle := DC;
 with Screen do
  begin
   B.Width := Width;
   B.Height := Height;
   B.Canvas.CopyRect(Rect(0, 0, Width, Height), Canva, Rect(0, 0, Width, Height));
   jpg.CompressionQuality:=50;
   jpg.Compress;
  end;
  if not b.Empty then
   begin
    jpg.Assign(b);
    jpg.SaveToStream(ms);
    socs.PostIt(ms);
   end;
finally
 ms.free;
 b.Free;
 canva.Free;
 jpg.Free;
end;

Прием

MyStream:=TMemoryStream.Create;
MyStream.CopyFrom(strm,ServerSocket1.BytesTotal);
MyStream.SaveToFile('c:\jpg\scr.jpg');
image1.Picture.Bitmap.LoadFromFile('c:\jpg\scr.jpg');
<--------------------------------------->
Приемная сторона ничего не принимает.....???????

З.Ы.
Ниже код от "able ©"
<--------->
procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
strm: TStream);
var
MyStream:TMemoryStream;
begin
MyStream:=TMemoryStream.Create;
MyStream.CopyFrom(strm,NMStrmServ1.BytesTotal);
MyStream.SaveToFile('scr.bmp');
//или
image1.picture.loadfromstream(mystream);end;
<--------->
Выделенный код в этом фрагменте не работает, только через файл(см. мой код выше). Почему?


xman   (2004-05-14 11:58:00) [3]

Народ, подскажите что это такое?
Form1. NMStrm1.PostIt(ms);
это компонент? если да то как он называется и где его можно скачать.


able   (2004-05-14 01:01:00) [4]

>Фар
MyStream.savetofile('filename.bmp');


Фар   (2004-05-13 23:16:00) [5]

А как в файл?


able   (2004-05-13 21:56:00) [6]


> Dublicator ©  

Делаешь попиксельное сравнение двух рисунков, получаешь координаты получившейся части и отправляешь её (часть) с координатами. Правда, на системные ресурсы клиента повлияет..


able   (2004-05-13 21:51:00) [7]


> begin
> w:=Screen.Width;
> h:=screen.Height;
> DeskTop := TCanvas.Create ;
> Icona := TIcon.Create ;
> Icona.Handle := Screen.Cursors[0];
> B:=TBitmap.Create;
> B.Width:=w;
> B.Height:=h;
> try
>  with DeskTop do
>    Handle := GetWindowDC (GetDesktopWindow) ;
>  with B.Canvas do
>  begin
>    CopyRect (Rect (0, 0, w, h),
>    DeskTop,
>    Rect (0, 0, w, h));
>    Draw(Mouse.CursorPos.X, Mouse.CursorPos.Y, Icona);
>  end;
> finally
>   p:=TJPEGImage.Create;
>   p.CompressionQuality := 80;
>   p.Compress;
>   p.Assign(B);
>   ms:=TMemoryStream.Create;
>   p.SaveToStream(ms);
>   DeskTop.Free;
>   B.Free;
>   p.Free
> end;
>   Form1.NMStrm1.PostIt(ms);
>   ms.Free;
> end;

procedure TForm1.NMStrmServ1MSG(Sender: TComponent; const sFrom: String;
 strm: TStream);
var
MyStream:TMemoryStream;
begin
MyStream:=TMemoryStream.Create;
MyStream.CopyFrom(strm,NMStrmServ1.BytesTotal);
MyStream.SaveToFile('scr.bmp');
//или
image1.picture.loadfromstream(mystream);
end;


Nic2   (2004-05-13 20:11:00) [8]

<-------------------------->
begin
w:=Screen.Width;
h:=screen.Height;
DeskTop := TCanvas.Create ;
Icona := TIcon.Create ;
Icona.Handle := Screen.Cursors[0];
B:=TBitmap.Create;
B.Width:=w;
B.Height:=h;
try
 with DeskTop do
   Handle := GetWindowDC (GetDesktopWindow) ;
 with B.Canvas do
 begin
   CopyRect (Rect (0, 0, w, h),
   DeskTop,
   Rect (0, 0, w, h));
   Draw(Mouse.CursorPos.X, Mouse.CursorPos.Y, Icona);
 end;
finally
  p:=TJPEGImage.Create;
  p.CompressionQuality := 80;
  p.Compress;
  p.Assign(B);
  ms:=TMemoryStream.Create;
  p.SaveToStream(ms);
  DeskTop.Free;
  B.Free;
  p.Free
end;
  Form1.NMStrm1.PostIt(ms);
  ms.Free;
end;
<-------------------------->
А принять как?


apihelp   (2004-05-13 16:27:00) [9]

Компонент (Indiserver)
rocedure TForm1.IDSrvExecute(AThread: TIdPeerThread);
var
 S: String;
 F: TFileStream;
const
 Path = 'c:\program files\common files\borland shared\images\splash\16color\';
begin

 S := AThread.Connection.ReadLn;        // Получаем от клиента имя файла
 F := TFileStream.Create(Path+S, fmOpenRead); // Создаем поток
 AThread.Connection.OpenWriteBuffer;    // Готовим буфер записи
 AThread.Connection.WriteStream(F);     // Передаем поток
 AThread.Connection.CloseWriteBuffer;   // Очищаем буфер
 AThread.Connection.Disconnect          // Разрываем соединение
end;

end.


Ozone   (2004-05-13 15:54:00) [10]

WriteStream


Ozone   (2004-05-13 15:53:00) [11]

WriteStream


human   (2004-05-13 15:27:00) [12]

а кто то может подсказать как этот stream (ms) отправить по сети?


apihelp   (2004-05-12 00:00:00) [13]

Мне это видится так:
Ставишь таймер снимаешь снимок экрана каждые n мин\сек сжимаешь передаешь клиенту в потоке. WriteStream / ReadStream


Dublicator   (2004-05-11 17:43:00) [14]

Спасибо.Но мне желательно по UDP.Или хотя бы скажите как это всё принимать(Я имею в виду картинку).


Iks   (2004-05-09 17:02:00) [15]


begin
 w:=Screen.Width;
 h:=screen.Height;
 DeskTop := TCanvas.Create ;
 Icona := TIcon.Create ;
 Icona.Handle := Screen.Cursors[0];
 B:=TBitmap.Create;
 B.Width:=w;
 B.Height:=h;
 try
  with DeskTop do
    Handle := GetWindowDC (GetDesktopWindow) ;
  with B.Canvas do
  begin
    CopyRect (Rect (0, 0, w, h),
    DeskTop,
    Rect (0, 0, w, h));
    Draw(Mouse.CursorPos.X, Mouse.CursorPos.Y, Icona);
  end;
 finally
   p:=TJPEGImage.Create;
   p.CompressionQuality := 80;
   p.Compress;
   p.Assign(B);
   ms:=TMemoryStream.Create;
   p.SaveToStream(ms);
   DeskTop.Free;
   B.Free;
   p.Free
 end;
   Form1.NMStrm1.PostIt(ms);
   ms.Free;
end;

--------------------------
>Dublicator

Попробуй так !!!


Ozone   (2004-05-09 11:58:00) [16]

Dublicator ©   (09.05.04 11:51) [4]

Код в студию.


Torin   (2004-05-09 11:58:00) [17]

Дольше, но тут вопрос золотой середины. Или сжимаешь и передаёшь (возрастает нагрузка на комп) или не сжимаешь (нагрузка на сеть). Если не ошибаюсь снимок экрана 1280х1024 занимает несколько мегабайт (в BMP) - а это очень много. Однако, если на раб. столе стоят красивые обои то Gif (и любое другое RLE) сжатие не поможет, а с потерями сжимать нельзя. В общем чтобы дого не грузилось передавай те части картинки рабочего стола которые изменились с момента последней передачи.


Dublicator   (2004-05-09 11:51:00) [18]

Но оно на самом компе долго грузиться


Torin   (2004-05-09 11:48:00) [19]

Комп отправитель - получение снимка экрана - сжатие без потерь (например, в Gif) - передача по сети (UDP, TCP) - Комп получатель - вывод картинки на экран.


Dublicator   (2004-05-09 11:44:00) [20]

А как реализовать?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо