Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.035 c
14-1087546807
DSKalugin
2004-06-18 12:20
2004.07.11
В чем ошибка?


14-1087797463
ПсихЪ
2004-06-21 09:57
2004.07.11
Глюки форума при рефреше (F5)


14-1087575408
Алхимик
2004-06-18 20:16
2004.07.11
Завтра экзамен. Горю. :-)


14-1087502053
lak
2004-06-17 23:54
2004.07.11
клава с японским


3-1087192084
Tariel
2004-06-14 09:48
2004.07.11
InterBase - Сколько раз выполняется вложенный запрос в where





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский