
29.11.2011, 12:42
|
Прохожий
|
|
Регистрация: 12.01.2007
Сообщения: 23
Репутация: 10
|
|
отправка картинки по УДП
Здравствуйте! как можно отправить картинку по частям через УДП
клиент
Код:
procedure TForm1.seti;
var
MemStream : TMemoryStream;
buf : array[1..40000] of Char;
begin
bmp:= TBitmap.Create;
Jpg:= TJpegImage.Create;
bmp.Height:=Screen.Height;
bmp.Width:=Screen.Width;
DC:=GetDC(0);
PatBlt(Form1.Canvas.Handle, 0, 0, Form1.ClientWidth, Form1.ClientHeight, WHITENESS);
bitblt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC, 0, 0, SRCCOPY);
Jpg.Assign(Bmp);
jpg.CompressionQuality:=8;
jpg.Compress;
ReleaseDC(0, DC);
try
MemStream:= TMemoryStream.Create;
jpg.SaveToStream(MemStream);
For I:=0 to 10 do
Begin
MemStream.Position := 0;
IdUDPClient1.SendBuffer(MemStream.Memory^,MemStream.Size);
{IdUDPClient1.SendBuffer(MemStream.Memory^, 64512);}
MemStream.Position:=0;
Application.ProcessMessages;
end;
finally
MemStream.Free;
jpg.Free;
Bmp.Free;
end;
end;
------------------------------------------
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var t:string; StrStream: TStringStream;
begin
if AData.Size<=8 then
begin
StrStream:=TStringStream.Create('');
StrStream.CopyFrom(AData, AData.Size);
if StrStream.DataString='otpravka' then seti;
end;
end;
Сервер
Код:
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
txt1,s,sl:string; t1,jcnt:integer;
StrStream: TStringStream;
MemStream: TMemoryStream; jpg: TJpegImage;
begin
if AData.Size<=16 then
begin
StrStream:=TStringStream.Create('');
StrStream.CopyFrom(AData, AData.Size);
ListBox1.Items.Add(StrStream.DataString);
t1:=0;
repeat
jcnt:=ListBox1.Items.Count-1;
repeat
if (ListBox1.Items[jcnt]=ListBox1.Items[t1]) and
(jcnt<>t1)
then begin
ListBox1.Items.Delete(jcnt);
ListBox1.Items.Delete(t1);
end;
Dec(jcnt)
until jcnt<=t1;
Inc(t1)
until t1>ListBox1.Items.Count-1;
Application.ProcessMessages;
StrStream.Free;
end else
if AData.Size > 0 then
begin
jpg := TJPEGImage.Create;
MemStream:= TMemoryStream.Create;
MemStream.CopyFrom(AData, AData.Size);
MemStream.Position := 0;
jpg.LoadFromStream(MemStream);
Image1.Picture.Graphic := jpg;
MemStream.Free;
jpg.Free;
end;end;
---------------------------------
IdUDPClient1.Active:=true;
try
IdUDPClient1.Send('otpravka');
finally
IdUDPClient1.Active:=false;
end;
|