Главная страница
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.028 c
4-60465
boa
2003-04-21 09:11
2003.06.19
Проблема с получением оттенка от clBtnFace


14-60408
uncle_Ru
2003-06-03 12:05
2003.06.19
Взлом InterBase


1-60196
Шнурок
2003-06-05 08:06
2003.06.19
Как в делфи работать со страницей?


1-60105
Dr. Andrew
2003-06-04 14:30
2003.06.19
Как отловить событие, когда курсор мыши вне формы!


3-60070
Nikolai_S
2003-05-28 12:43
2003.06.19
Как обновить только текущую запись в TADOQuery?