Это простой пример, который можно усовершенствовать в дальнейшем. Изображение сжимаем в строку и передаем её на сервер. Там оно оказывается в переменной bmp:tbitmap; В примере почти отсутствуют всяческие проверки, только идея, но тем не менее картинка успешно передается.
Что делаем на сервере?
В методах сервера пишем такую процедуру…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
procedure TServerMethods1.StreamToPic(s: string); var imageForm: TForm; image: timage; ss: Tstringstream; ms: TmemoryStream; bmp: TBitmap; begin bmp := TBitmap.Create(); ss: = tstringstream.Create(s); ms: = tmemorystream.Create; try ms.LoadFromStream(ss); bmp.LoadFromStream(ms); // do smth with bmp finally ss.Free(); ms.Free(); bmp.Free(); end; end;<!--more--> |
Что делаем на клиенте?
Вот обработчики кнопок…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
procedure TForm.b_Upload_to_TImageClick(Sender: TObject); var twic: twicimage; bmp: tbitmap; begin twic := twicimage.Create; bmp := tbitmap.Create; if OpenDialog.Execute then try twic.LoadFromFile(OpenDialog1.FileName); bmp.AlphaFormat := afDefined; bmp.Assign(twic); image.Picture.Assign(bmp); finally twic.Free; bmp.Free; end; end; |
Отправка на сервер…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
procedure TForm2.b_Send_to_DataSnap_ServerClick(Sender: TObject); var ss: TStringStream; s: string; smc: TServerMethods1Client; begin ss:=tstringstream.Create(''); try if image1 <> nil then begin image.Picture.Graphic.SaveToStream(ss); s := ss.DataString; end; //Отправка на сервер... smc:=TServerMethods1Client.Create(sqlconnection1.DBXConnection); smc.StreamToPic(s); finally smc.Free; ss.Free; end; end; |