Форум: "Сети";
Текущий архив: 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.033 c