使用delphi 開發多層應用(十八)使用Basic4android 訪問RTC 服務的二進制流(照片)


    上次寫了b4a 通過xmlrpc 訪問rtc 的遠程服務,有網友詢問如何通過b4a 訪問RTC web 的二進制流,例如如何下載

服務器上的照片,其實訪問二進制流和訪問字符串類似,不同的地方是,由於是通過http 協議,對於二進制流,需要先轉換成

base64 編碼,到客戶端后再再把base64 轉換回去成二進制碼,就可以了。(注:由於RTC 的bug,需要RTC 6.08 以上的版本)

   RTC服務器端的代碼如下:

procedure TForm1.RtcFunction3Execute(Sender: TRtcConnection;
  Param: TRtcFunctionInfo; Result: TRtcValue);
  var
mys: TRtcFileStream;

  ss:Trtchugestring;
  r:Trtcvalue;
  s:string;
begin
   r:=Trtcvalue.Create;
   mys:=TRtcFileStream.Create();
   mys.Open('d:\test.jpg');
   s:= RtcBytesToString( Mime_EncodeEx(mys.Readex(-1),True) ); // 讀文件並轉換成base64
   result.asstring:=s;

end;

 Basci4android 里面的代碼也很簡單:

Sub button2_Click
  	 
	Dim out As OutputStream
	Dim b As Base64
    
	Dim bb () As Byte
	s=XMLRPC1.stringCall("getimg",x)
	bb=b.DecodeStob(s) ' 轉換回去
	out = File.OpenOutput(File.DirRootExternal, "test.jpg", False)
	out.WriteBytes(bb,0,bb.Length)
	ImageView1.Bitmap=LoadBitmap (File.DirRootExternal, "test.jpg")
	 
	 
End Sub

 服務器和客戶端都運行起來,就可以在android 上顯示服務器上的照片了

ok.顯示正常

2013年7月18日 補記:

上面使用存儲卡轉換了一下,如果沒有存儲卡就無法跑了,現在直接在內存中轉換

 

Sub button2_Click
  
	Dim s    As String 
 
	Dim b As Base64
    
	Dim bb () As Byte
	 
	Dim Bitmap1 As Bitmap 
	Dim IpSt As InputStream
	
	s=XMLRPC1.stringCall("getimg",x) 
bb=b.DecodeStob(s) ' 轉換回去 IpSt.InitializeFromBytesArray(bb, 0, bb.Length) Bitmap1.Initialize2(IpSt) ImageView1.Bitmap = Bitmap1 End Sub

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM