Recent

Author Topic: how to sending ByteArray to java ?  (Read 1777 times)

mohsenti

  • Jr. Member
  • **
  • Posts: 58
how to sending ByteArray to java ?
« on: November 30, 2015, 11:35:36 am »
Hi all
I develop simple function to save a Bitmap to MemoryStream and send it as ByteArray to java application like below .
Code: Pascal  [Select][+][-]
  1. function JavaBitmap(PEnv: PJNIEnv; Obj: JObject):jbyteArray;
  2.   var
  3.     MemStr:TMemoryStream;
  4.     Bmp:TBitmap;
  5.     Bytes:Array of Byte;
  6.   begin
  7.     MemStr:=TMemoryStream.Create;
  8.     Bmp:=TBitmap.Create;
  9.     Bmp.Width:=1024;
  10.     Bmp.Height:=1024;
  11.     Bmp.Canvas.Brush.Color:=clBlack;
  12.     Bmp.Canvas.FillRect(0,0,1024,1024);
  13.     Bmp.SaveToStream(MemStr);
  14.     Bmp.Free;
  15.     MemStr.Position:=0;
  16.  
  17.     SetLength(Bytes,MemStr.Size);
  18.  
  19.     MemStr.Read(Bytes[0],MemStr.Size);
  20.  
  21.     Result:=PEnv^^.NewByteArray(PEnv,MemStr.Size);
  22.     PEnv^^.SetByteArrayRegion(PEnv,Result,0,Length(Bytes),@Bytes[0]);
  23.  
  24.     SetLength(Bytes,0);
  25.  
  26.     MemStr.Free;
  27.   end;
  28.  

I don't know what is wrong in my code but java application crashed.

thank you for helps

User137

  • Hero Member
  • *****
  • Posts: 1791
    • Nxpascal home
Re: how to sending ByteArray to java ?
« Reply #1 on: November 30, 2015, 02:45:30 pm »
If it's Java side that crashes, shouldn't we see that code too? But overall i have no clue what you are going at with the code. Reader streams in Java and Pascal surely aren't compatible, and what even is this magical link between Pascal and Java that i thought was impossible?

balazsszekely

  • Guest
Re: how to sending ByteArray to java ?
« Reply #2 on: November 30, 2015, 04:28:43 pm »
Try This:
Code: Pascal  [Select][+][-]
  1. function JavaBitmap(PEnv: PJNIEnv; Obj: JObject): jbyteArray;
  2. var
  3.   MemStr: TMemoryStream;
  4.   Bmp: TBitmap;
  5.   Bytes: array of Bytes;
  6. begin
  7.   MemStr:=TMemoryStream.Create;
  8.   try
  9.     Bmp:=TBitmap.Create;
  10.     try
  11.       Bmp.Width := 1024;
  12.       Bmp.Height := 1024;
  13.       Bmp.Canvas.Brush.Color := clBlack;
  14.       Bmp.Canvas.FillRect(0, 0, 1024, 1024);
  15.       Bmp.SaveToStream(MemStr);
  16.     finally
  17.       Bmp.Free;
  18.     end;
  19.     MemStr.Position := 0;
  20.     SetLength(Bytes, MemStr.Size);
  21.     MemStr.Read(Bytes[0], MemStr.Size);
  22.   finally
  23.     MemStr.Free;
  24.   end;
  25.  
  26.   Result := PEnv^^.NewByteArray(PEnv, High(Bytes) + 1);
  27.   PEnv^^.SetByteArrayRegion(PEnv, Result, 0, High(Bytes) + 1, @Bytes[0]);
  28.   SetLength(Bytes, 0);
  29. end;  

PS: You're not using Obj at all.

 

TinyPortal © 2005-2018