Здравствуйте! подскажите как передать картинку от IdUDPClient1 к IdUDPServer1 чтобы на IdUDPServer1 отобразилась в image1. Code: var MemStream : TMemoryStream; begin MemStream:= TMemoryStream.Create; MemStream.LoadFromFile(Edit1.Text); IdUDPClient1.SendBuffer(MemStream.Memory^,MemStream.Size); MemStream.Free; когда передаю *zip или *rar, тхт все нормально, а вот файлы jpg или bmp вылазиет ошибка error image Спасибо!
А ты принятый файл для начала сохрани на диск, попробуй открыть каким-либо стандартным вьювером, или просто сравни,чем он от оригинала отличается - думаю, сразу видно будет в чем проблема
image другими прогами картинка открываеться acds. через паинт сделал рисунок и попробывал также отправить на bmp ругаться стал, размер не устроил, а на jpg вообще молчит. error bmp
максимальный размер пакета 64 кб. на винде бывают проблемы уже с размером в 16 кб. пробуй методом тыка, какой размер пакета пойдёт.
теперь понил, доходит только половина картинки. Клиент Code: 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; Сервер Code: 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; как передать кусочками? может кто подскажет?