Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

Передача изображения по локальной сети   Найти похожие ветки 

 
Dublicator ©   (2004-05-09 10:56) [0]

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


 
Mentat   (2004-05-09 11:20) [1]

UDP


 
Dublicator ©   (2004-05-09 11:44) [2]

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


 
Torin ©   (2004-05-09 11:48) [3]

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


 
Dublicator ©   (2004-05-09 11:51) [4]

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


 
Torin ©   (2004-05-09 11:58) [5]

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


 
Ozone ©   (2004-05-09 11:58) [6]

Dublicator ©   (09.05.04 11:51) [4]

Код в студию.


 
Iks ©   (2004-05-09 17:02) [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;

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

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


 
Dublicator ©   (2004-05-11 17:43) [8]

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


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

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


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

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


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

WriteStream


 
Ozone ©   (2004-05-13 15:54) [12]

WriteStream


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

Компонент (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.


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

<-------------------------->
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;
<-------------------------->
А принять как?


 
able ©   (2004-05-13 21:51) [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;

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;


 
able ©   (2004-05-13 21:56) [16]


> Dublicator ©  

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


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

А как в файл?


 
able ©   (2004-05-14 01:01) [18]

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


 
xman ©   (2004-05-14 11:58) [19]

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


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

Спасибо, работает.
А в чем прикол при передаче 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;
<--------->
Выделенный код в этом фрагменте не работает, только через файл(см. мой код выше). Почему?


 
Dublicator ©   (2004-05-14 16:35) [21]

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



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.029 c
14-1087820393
ИМХО
2004-06-21 16:19
2004.07.11
Вопрос по ICQ


8-1083141345
Marina_S
2004-04-28 12:35
2004.07.11
Исходник JPEG


3-1087464393
AntonVS
2004-06-17 13:26
2004.07.11
TDataSet.Translate


3-1087288374
Jaxtor
2004-06-15 12:32
2004.07.11
Триггер не выдает сообщения оь ошибке


1-1088159389
Helpme
2004-06-25 14:29
2004.07.11
CreateProcess