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

Вниз

Протокол Udp   Найти похожие ветки 

 
Keksis ©   (2003-04-18 15:49) [0]

Пытаюсь переправить по протоколу UDP при помощи компонента NMUDP1 из fastnet изображение рабочего стола сохраненного в формате TBitmap, но видно эта картинка весит больше чем размер передаваемого пакета, как мне передать её в несколько этапов, подскажите плс, если можно примерчик.


 
Snap ©   (2003-04-18 15:52) [1]

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


 
Digitman ©   (2003-04-18 15:55) [2]

http://delphimaster.net/view/6-1050575329/


 
MMF ©   (2003-04-18 16:25) [3]

На пример, только за качество кода просьба не пинать - пишу как могу.
type TScreenFrame=Record
ID: char;
Size: Integer;
index: byte;
ScreenTime: TDateTime;
Data: array [0..PacketSize-1] of byte;
end;
//отсылка экрана
try
MyStream:=TMemoryStream.Create();
MyJpeg.SaveToStream(MyStream);
MyJpeg.Free;
MyStream.Seek(0, soFromBeginning);
FrameCnt:=0; //счетчик индекса отсылаемой части экрана
ScrFrame.ScreenTime:=ScrTime;
while MyStream.Position<(MyStream.Size-PacketSize+1) do
begin
ScrFrame.ID:="%";
ScrFrame.index:=FrameCnt;
Inc(FrameCnt);
MyStream.ReadBuffer(ScrFrame.Data, PacketSize);
ScrFrame.Size:=PacketSize;
move(ScrFrame, SendBuf, SizeOf(ScrFrame));
NMUDP1.SendBuffer(SendBuf, SizeOf(ScrFrame));
end;
//отсылаем последний кусочек
if MyStream.Position<>MyStream.Size then
begin
ScrFrame.ID:="%";
ScrFrame.index:=FrameCnt+1;
SendSize:=MyStream.Size-MyStream.Position;
MyStream.ReadBuffer(ScrFrame.Data, SendSize);
ScrFrame.Size:=SendSize;
move(ScrFrame, SendBuf, SizeOf(ScrFrame));
NMUDP1.SendBuffer(SendBuf, SizeOf(ScrFrame));
end;
finally
MyStream.Free;
end;

procedure TForm1.GetFrame(FrameSize: integer);
var Frame: TscreenFrame;
FrameBuf: array [0..(sizeOf(TScreenFrame)-1)] of char;
fView: TfView;
pMemo: Pbyte;
i: integer;
begin
NMUDP1.ReadBuffer(FrameBuf, FrameSize);
move(FrameBuf, Frame, FrameSize);
//определим, это часть старого экрана или новый
if Frame.ScreenTime<>LastScrTime then
begin
LastScrTime:=Frame.ScreenTime;
if Scr.Size<>0 then
begin
//показываем ранее принятый экран
fView:=TfView.Create(Application);
fView.ShowStream(Scr);
fView.ShowModal;
fView.free;
scr.free;
Scr:=TMemoryStream.Create();
end;
end;
if Scr.Size<(frame.index+1)*PacketSize then
Scr.SetSize((frame.index+1)*PacketSize);
pMemo:=scr.memory;
inc(pMemo, frame.index*PacketSize);
for I:=0 To (PacketSize-1) do
begin
pMemo^:=frame.Data[i];
Inc(pMemo);
end;
end;



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

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

Наверх




Память: 0.47 MB
Время: 0.031 c
1-60186
Fantasy
2003-06-05 05:59
2003.06.19
Timer


1-60165
tasman
2003-06-06 06:51
2003.06.19
Динамическое назначение event у компоненты NMPop3 (из FastNet)


6-60287
xman
2003-04-16 10:36
2003.06.19
Речь


1-60118
sirius
2003-06-06 11:57
2003.06.19
Вопрос по созданию компонент Delphi


7-60431
ers
2003-04-14 13:48
2003.06.19
Количество файлов!