image base64 lazarus / 43-Android ---------------------------------------------------------------------- xinyiman · 2019-11-12 09:25 Goodmorning everyone. For one of my projects I'm writing a photo gallery that takes images from a json server that returns images in base64. Until now, thanks to jmpessoa I am able to understand how to create the gallery starting from the assets. But I don't understand how to put an image in the form of a base 64 in a jBitmap. I figured out how to do it with the jWebView object but this is not covered in the example of the gallery that gave me jmpessoa. I also tried to use the library I usually use with lazarus to transform a base64 into a stream, but it crashes the program (see next code). Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i unit funzioni_base64; //{$mode objfpc}{$H+}{$mode delphi} interface uses  Classes, SysUtils, base64; function StreamToBase64(AInputStream: TStream): string;function Base64ToStream(const ABase64:string; AOutStream: TStream; const AStrict: Boolean=false):Boolean;function Base64ToFile(const Base64, AFile: String): boolean;function FileToBase64(const AFile: String): string;  implementation function StreamToBase64(AInputStream: TStream): string;var  OutputStream: TStringStream;  Encoder: TBase64EncodingStream;begin  Result := '';   OutputStream := TStringStream.Create('');  Encoder := TBase64EncodingStream.Create(OutputStream);   try    AInputStream.Position := 0;    Encoder.CopyFrom(AInputStream, AInputStream.Size);    Encoder.Flush;     OutputStream.Position := 0;     Result := OutputStream.DataString;  finally    Encoder.Free;  OutputStream.Free;  end;end; function Base64ToStream(const ABase64:string; AOutStream: TStream; const AStrict: Boolean=false):Boolean;var  InStream : TStringStream;  Decoder  : TBase64DecodingStream;begin  Result   := False;  InStream := TStringStream.Create(ABase64);  try    if AStrict then      Decoder := TBase64DecodingStream.Create(InStream, bdmStrict)    else      Decoder := TBase64DecodingStream.Create(InStream, bdmMIME);    try       AOutStream.CopyFrom(Decoder, Decoder.Size);       AOutStream.Position := 0;       Result := True;    finally      Decoder.Free;    end;  finally    InStream.Free;  end;end; function Base64ToFile(const Base64, AFile: String): boolean;var  OutStream: TFileStream;begin  Result := False;  OutStream := TFileStream.Create(AFile, fmCreate or fmShareExclusive);  try     Base64ToStream(Base64, OutStream);     Result := True;  finally    Outstream.Free;  end;end; function FileToBase64(const AFile: String): string;var  InputStream: TFileStream;begin  if not FileExists(AFile) then    Exit('');   InputStream := TFileStream.Create(AFile, fmOpenRead or fmShareDenyWrite);  try    Result := StreamToBase64(InputStream);  finally    InputStream.Free;  end;end; end.  Ideas? ---------------------------------------------------------------------- xinyiman · 2019-11-12 09:49 First obstacle exceeded. The problem was not the library, but the base64 string. Now I can put the image in the stream. With the following code Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i   appMem := TMemoryStream.Create;  Base64ToStream('iVBORw0KGgoAAAANSUhEUgAAAOEAAAD hCAMAAAAJbSJIAAAAb1BMVEX///8AWpwATJXc4+wAUZiluNEAR5MAT5fx9vmDo8UAU5kAS 5WFpMX1+fsAWJsAVZo4cqkAXJ2Op8fe5+/o7/XX4OtqkLkeZqM4c6qWsM11mb9Lfq8sa6W +zuBAeK1+nsK4y91ah7XJ1+UVYqCxwdbk4OdXAAAE7UlEQVR4nO2d7XqiMBBGwaUVQUNVq tXW2l17/9e41g+62zJkJsRMhs75uU/r5vA6YRIoJImiKIqiKIqiKIqiKIqiKIqiKIqiKMr PI1/+cqWecQ/eTj1dl6MePG1yboVOZtuyMGkfTFZsuC06qOdZL70zo2duD5Dc9MvvSvHAb QLxUnkRjFdxM/YkGKvizFeC0SruRh4No1Tc+swwSsVXPxNpxIoHz4bxKfoWPPY35f0tMC/ 7P06G3gVvhinK9dugDdOPr8fvgRumafY6dMM0Ww3dMC13Qzc066EbpiXxpME9XjrFfuiGh tg0tX9Kgd2C8t8S2TEeDIsFch9x+VAE1jty78Ewu0P/PoNiYEMGxdCG4RWDGwZXDG8YWpH BMLAih2FYRRbD5Hkc7tzPY5hMR8FiZDJM6lVVjjO/tO/lchkeedzd+WXVqsho6J271guba vgFNWRFDVGoIStqiEINWWE0rJ3v8iOxaO3mR/b/fVn3MlxO5qNe9/mhAZYr9l8sy/midjb sfZtfEExR7t0M6znDHrAb2SF3MKwrAfldqdKabrj2e4PRjaleyIYeb/MLwnhDNMwD7jf5w RANJ2JmmSvjN5Lh7D7w+PpTbUmG8iJMzRPFUF4VHg0PFEOBEabpnGCYs1y074l5JRiKjLD a4w0lVuFxGbLDG4qMMK3wZ3yZERYTvOFUYoSmzNGGIifSU4RYQ5FVaMY52lBuFWINwQhvv xtlB1qUmxF+FyMvIcHHAHuKtp3D9ivFxwinCdoQivD8NWBmlrVX0LkKcYZQFV4/gxfb4cc YRh0hePizy+FHGEJL+9P5lB2oFWkOP8Iw7giBVuQykSYYQ9lViDGMO0JbFSIM7V8DThCH3 2oIfsaUQegrYCtSfj6MxGYovQrthjKr8N/DbzFEVDIjqMNvMbSeTznBtSLdhuIn0sRmKL8 KLYYDqEKLYdwRIiuoyxBzPuUD24p0GcYdIbYV6TCU386c6DCUGeG3SRA2FL60b4AN444Q3 4qAhgOpwg7DuCMktCKQ4RA60jOQofilfQNgOBtKFUKG7+13WMdeha2Hv91jATwPU9Si4kL 7z0JEESGxFQF+GPhncRNpQswwigiprQhFUGIVthtCdyXEESG1FaFkKGpp30AQjCNCciuCF xTYzpxoMREZITwJ4iMUtrRvQBvGEaHDmg4dodAq/G44tCpEZyiyIz2DNJS3tG9ARii2Cr8 ayqzC7sOPi1DkouKCnAhdrzKgIpQ7kSY4wygidL7KgIlQchX+Zxh1FbpfZUBkKHNp32AXj CNC96sMVkHJ7cyJTxORESImQWuEUpf2DTbDOCLsc7nWFqH0KmwMB1uFtgxld6Rnug0FL+0 buiOUX4UXQ5lViDz8nRFmUXekyMPfFWG1cn+DrjcegdcXoluRrgzTivuPmD8AxoauoE7Di MFPgtwjdQU/CcJVGDWEVoR7qI4QWhHuobpBaUW4x+oGpRXhHqsTpP1N7sE6QeomuQfrAm1 Nxz1aF2gLgjn3cOkQrzIcuMdLh7imgx5fEzHEqwzvwp6bS1+WQ0/oiRb6zsq09dn18ZLRN 8e8v139ppg5WTCpJTxE/orJlnTDZFmJeaBeUbkIHmebVSnCsShXzpt/y70J8z6HPpitW4B XAr2Uw53a7qAoiqIoiqIoiqIoiqIoiqIoiqIoivKz+QtcBHyrUyhNmAAAAABJRU5ErkJgg g==',appMem);  jImageList1.Images.LoadFromStream(appMem);  appMem.Free; ---------------------------------------------------------------------- xinyiman · 2019-11-12 09:51 But now I have the problem that I can't get this code displayed. I tried this but the program crashed Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i     jBitmap1.Images := jImageList1;  jBitmap1.ImageIndex:=0;  bmp := jBitmap1.GetImage();  jHorizontalScrollView1.AddImage(bmp,105, scaleFitXY); ---------------------------------------------------------------------- xinyiman · 2019-11-12 10:50 Now i test this code. Application run but not show my image.  Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i   appMem := TMemoryStream.Create;  Base64ToStream('iVBORw0KGgoAAAANSUhEUgAAAOEAAAD hCAMAAAAJbSJIAAAAb1BMVEX///8AWpwATJXc4+wAUZiluNEAR5MAT5fx9vmDo8UAU5kAS 5WFpMX1+fsAWJsAVZo4cqkAXJ2Op8fe5+/o7/XX4OtqkLkeZqM4c6qWsM11mb9Lfq8sa6W +zuBAeK1+nsK4y91ah7XJ1+UVYqCxwdbk4OdXAAAE7UlEQVR4nO2d7XqiMBBGwaUVQUNVq tXW2l17/9e41g+62zJkJsRMhs75uU/r5vA6YRIoJImiKIqiKIqiKIqiKIqiKIqiKIqiKMr PI1/+cqWecQ/eTj1dl6MePG1yboVOZtuyMGkfTFZsuC06qOdZL70zo2duD5Dc9MvvSvHAb QLxUnkRjFdxM/YkGKvizFeC0SruRh4No1Tc+swwSsVXPxNpxIoHz4bxKfoWPPY35f0tMC/ 7P06G3gVvhinK9dugDdOPr8fvgRumafY6dMM0Ww3dMC13Qzc066EbpiXxpME9XjrFfuiGh tg0tX9Kgd2C8t8S2TEeDIsFch9x+VAE1jty78Ewu0P/PoNiYEMGxdCG4RWDGwZXDG8YWpH BMLAih2FYRRbD5Hkc7tzPY5hMR8FiZDJM6lVVjjO/tO/lchkeedzd+WXVqsho6J271guba vgFNWRFDVGoIStqiEINWWE0rJ3v8iOxaO3mR/b/fVn3MlxO5qNe9/mhAZYr9l8sy/midjb sfZtfEExR7t0M6znDHrAb2SF3MKwrAfldqdKabrj2e4PRjaleyIYeb/MLwnhDNMwD7jf5w RANJ2JmmSvjN5Lh7D7w+PpTbUmG8iJMzRPFUF4VHg0PFEOBEabpnGCYs1y074l5JRiKjLD a4w0lVuFxGbLDG4qMMK3wZ3yZERYTvOFUYoSmzNGGIifSU4RYQ5FVaMY52lBuFWINwQhvv xtlB1qUmxF+FyMvIcHHAHuKtp3D9ivFxwinCdoQivD8NWBmlrVX0LkKcYZQFV4/gxfb4cc YRh0hePizy+FHGEJL+9P5lB2oFWkOP8Iw7giBVuQykSYYQ9lViDGMO0JbFSIM7V8DThCH3 2oIfsaUQegrYCtSfj6MxGYovQrthjKr8N/DbzFEVDIjqMNvMbSeTznBtSLdhuIn0sRmKL8 KLYYDqEKLYdwRIiuoyxBzPuUD24p0GcYdIbYV6TCU386c6DCUGeG3SRA2FL60b4AN444Q3 4qAhgOpwg7DuCMktCKQ4RA60jOQofilfQNgOBtKFUKG7+13WMdeha2Hv91jATwPU9Si4kL 7z0JEESGxFQF+GPhncRNpQswwigiprQhFUGIVthtCdyXEESG1FaFkKGpp30AQjCNCciuCF xTYzpxoMREZITwJ4iMUtrRvQBvGEaHDmg4dodAq/G44tCpEZyiyIz2DNJS3tG9ARii2Cr8 ayqzC7sOPi1DkouKCnAhdrzKgIpQ7kSY4wygidL7KgIlQchX+Zxh1FbpfZUBkKHNp32AXj CNC96sMVkHJ7cyJTxORESImQWuEUpf2DTbDOCLsc7nWFqH0KmwMB1uFtgxld6Rnug0FL+0 buiOUX4UXQ5lViDz8nRFmUXekyMPfFWG1cn+DrjcegdcXoluRrgzTivuPmD8AxoauoE7Di MFPgtwjdQU/CcJVGDWEVoR7qI4QWhHuobpBaUW4x+oGpRXhHqsTpP1N7sE6QeomuQfrAm1 Nxz1aF2gLgjn3cOkQrzIcuMdLh7imgx5fEzHEqwzvwp6bS1+WQ0/oiRb6zsq09dn18ZLRN 8e8v139ppg5WTCpJTxE/orJlnTDZFmJeaBeUbkIHmebVSnCsShXzpt/y70J8z6HPpitW4B XAr2Uw53a7qAoiqIoiqIoiqIoiqIoiqIoiqIoivKz+QtcBHyrUyhNmAAAAABJRU5ErkJgg g==',appMem);  jBitmap1.LoadFromBuffer(appMem, appMem.Size);  bmp := jBitmap1.GetThumbnailImage(jBitmap1.GetImage(), jHorizontalScrollView1.Height);  jHorizontalScrollView1.AddImage(bmp,109, scaleFitXY);  appMem.Free; ---------------------------------------------------------------------- Thaddy · 2019-11-12 12:50 Post a *complete* - but small - project, plz This is impossible to test because the code looks reasonable but is not a full application. ---------------------------------------------------------------------- xinyiman · 2019-11-12 13:02 Source is jmpessoa example with name: AppScrollingImages But i add this unit Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i     unit funzioni_base64;         //{$mode objfpc}{$H+}    {$mode delphi}      interface         uses      Classes, SysUtils, base64;         function StreamToBase64(AInputStream: TStream): string;    function Base64ToStream(const ABase64:string; AOutStream: TStream; const AStrict: Boolean=false):Boolean;    function Base64ToFile(const Base64, AFile: String): boolean;    function FileToBase64(const AFile: String): string;              implementation         function StreamToBase64(AInputStream: TStream): string;    var      OutputStream: TStringStream;      Encoder: TBase64EncodingStream;    begin      Result := '';           OutputStream := TStringStream.Create('');      Encoder := TBase64EncodingStream.Create(OutputStream);           try        AInputStream.Position := 0;        Encoder.CopyFrom(AInputStream, AInputStream.Size);        Encoder.Flush;             OutputStream.Position := 0;             Result := OutputStream.DataString;      finally        Encoder.Free;        OutputStream.Free;      end;    end;         function Base64ToStream(const ABase64:string; AOutStream: TStream; const AStrict: Boolean=false):Boolean;    var      InStream : TStringStream;      Decoder  : TBase64DecodingStream;    begin      Result   := False;      InStream := TStringStream.Create(ABase64);    try        if AStrict then          Decoder := TBase64DecodingStream.Create(InStream, bdmStrict)        else        Decoder := TBase64DecodingStream.Create(InStream, bdmMIME);        try           AOutStream.CopyFrom(Decoder, Decoder.Size);           AOutStream.Position := 0;           Result := True;        finally        Decoder.Free;        end;      finally        InStream.Free;    end;    end;         function Base64ToFile(const Base64, AFile: String): boolean;    var      OutStream: TFileStream;    begin      Result := False;      OutStream := TFileStream.Create(AFile, fmCreate or fmShareExclusive);      try         Base64ToStream(Base64, OutStream);         Result := True;      finally        Outstream.Free;      end;    end;         function FileToBase64(const AFile: String): string;    var      InputStream: TFileStream;    begin      if not FileExists(AFile) then        Exit('');           InputStream := TFileStream.Create(AFile, fmOpenRead or fmShareDenyWrite);      try        Result := StreamToBase64(InputStream);      finally        InputStream.Free;    end;    end;         end.  But i change AndroidModule1JNIPrompt procedure with this code: Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i var  bmp      : jObjectRef;  strDensity : string;  list       : TStringList;  appMem     : TMemoryStream;begin   //WARNING:  jHorizontalScrollView1.InnerLayout -> ilLinear;  //MUST be seted in design time! [object inspector]  //LinearLayout dont need anchor!!   strDensity := Self.GetScreenDensity();  Self.SetDensityAssets(strDensity);   bmp := jBitmap1.GetThumbnailImageFromAssets('baloons.jpg', jHorizontalScrollView1.Height);  jHorizontalScrollView1.AddImage(bmp,101, scaleFitXY);   bmp := jBitmap 1.GetThumbnailImageFromAssets('lightning.jpg',jHorizontalScrollView1.H eight);  jHorizontalScrollView1.AddImage(bmp,102, scaleFitXY);   bmp := jBitmap1.GetThumbnailImageFromAssets('wall.jpg',jHorizontalScrollVi ew1.Height);  jHorizontalScrollView1.AddImage(bmp,103, scaleFitXY);   bmp := jBitmap1.GetThumbnailImageFromAssets('veneza.jpg',jHorizontalSc rollView1.Height);  jHorizontalScrollView1.AddImage(bmp,104, scaleFitXY);   appMem := TMemoryStream.Create;  Base64ToStream('iVBORw 0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAb1BMVEX///8AWpwATJXc4+wAUZil uNEAR5MAT5fx9vmDo8UAU5kAS5WFpMX1+fsAWJsAVZo4cqkAXJ2Op8fe5+/o7/XX4OtqkL keZqM4c6qWsM11mb9Lfq8sa6W+zuBAeK1+nsK4y91ah7XJ1+UVYqCxwdbk4OdXAAAE7UlE QVR4nO2d7XqiMBBGwaUVQUNVqtXW2l17/9e41g+62zJkJsRMhs75uU/r5vA6YRIoJImiKI qiKIqiKIqiKIqiKIqiKIqiKMrPI1/+cqWecQ/eTj1dl6MePG1yboVOZtuyMGkfTFZsuC06 qOdZL70zo2duD5Dc9MvvSvHAbQLxUnkRjFdxM/YkGKvizFeC0SruRh4No1Tc+swwSsVXPx NpxIoHz4bxKfoWPPY35f0tMC/7P06G3gVvhinK9dugDdOPr8fvgRumafY6dMM0Ww3dMC13 Qzc066EbpiXxpME9XjrFfuiGhtg0tX9Kgd2C8t8S2TEeDIsFch9x+VAE1jty78Ewu0P/Po NiYEMGxdCG4RWDGwZXDG8YWpHBMLAih2FYRRbD5Hkc7tzPY5hMR8FiZDJM6lVVjjO/tO/l chkeedzd+WXVqsho6J271gubavgFNWRFDVGoIStqiEINWWE0rJ3v8iOxaO3mR/b/fVn3Ml xO5qNe9/mhAZYr9l8sy/midjbsfZtfEExR7t0M6znDHrAb2SF3MKwrAfldqdKabrj2e4PR jaleyIYeb/MLwnhDNMwD7jf5wRANJ2JmmSvjN5Lh7D7w+PpTbUmG8iJMzRPFUF4VHg0PFE OBEabpnGCYs1y074l5JRiKjLDa4w0lVuFxGbLDG4qMMK3wZ3yZERYTvOFUYoSmzNGGIifS U4RYQ5FVaMY52lBuFWINwQhvvxtlB1qUmxF+FyMvIcHHAHuKtp3D9ivFxwinCdoQivD8NW BmlrVX0LkKcYZQFV4/gxfb4ccYRh0hePizy+FHGEJL+9P5lB2oFWkOP8Iw7giBVuQykSYY Q9lViDGMO0JbFSIM7V8DThCH32oIfsaUQegrYCtSfj6MxGYovQrthjKr8N/DbzFEVDIjqM NvMbSeTznBtSLdhuIn0sRmKL8KLYYDqEKLYdwRIiuoyxBzPuUD24p0GcYdIbYV6TCU386c 6DCUGeG3SRA2FL60b4AN444Q34qAhgOpwg7DuCMktCKQ4RA60jOQofilfQNgOBtKFUKG7+ 13WMdeha2Hv91jATwPU9Si4kL7z0JEESGxFQF+GPhncRNpQswwigiprQhFUGIVthtCdyXE ESG1FaFkKGpp30AQjCNCciuCFxTYzpxoMREZITwJ4iMUtrRvQBvGEaHDmg4dodAq/G44tC pEZyiyIz2DNJS3tG9ARii2Cr8ayqzC7sOPi1DkouKCnAhdrzKgIpQ7kSY4wygidL7KgIlQ chX+Zxh1FbpfZUBkKHNp32AXjCNC96sMVkHJ7cyJTxORESImQWuEUpf2DTbDOCLsc7nWFq H0KmwMB1uFtgxld6Rnug0FL+0buiOUX4UXQ5lViDz8nRFmUXekyMPfFWG1cn+DrjcegdcX oluRrgzTivuPmD8AxoauoE7DiMFPgtwjdQU/CcJVGDWEVoR7qI4QWhHuobpBaUW4x+oGpR XhHqsTpP1N7sE6QeomuQfrAm1Nxz1aF2gLgjn3cOkQrzIcuMdLh7imgx5fEzHEqwzvwp6b S1+WQ0/oiRb6zsq09dn18ZLRN8e8v139ppg5WTCpJTxE/orJlnTDZFmJeaBeUbkIHmebVS nCsShXzpt/y70J8z6HPpitW4BXAr2Uw53a7qAoiqIoiqIoiqIoiqIoiqIoiqIoivKz+Qtc BHyrUyhNmAAAAABJRU5ErkJggg==',appMem);  appMem.Position:=0;  jBitmap1.LoadFromBuffer(appMem, appMem.Size);  bmp := jBitmap1.GetThumbnailImage(jBitmap1.GetImage(), jHorizontalScrollView1.Height);  jHorizontalScrollView1.AddImage(bmp,108, scaleFitXY);  appMem.Free; ---------------------------------------------------------------------- A.S. · 2019-11-12 19:53 Quote from: xinyiman on November 12, 2019, 11:50:48 amNow i test this code. Application run but not show my image.  Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i   appMem := TMemoryStream.Create;  Base64ToStream('iVBORw0KGgoAAAANSUhEUgAAAOEAAAD hCAMAAAAJbSJIAAAAb1BMVEX///8AWpwATJXc4+wAUZiluNEAR5MAT5fx9vmDo8UAU5kAS 5WFpMX1+fsAWJsAVZo4cqkAXJ2Op8fe5+/o7/XX4OtqkLkeZqM4c6qWsM11mb9Lfq8sa6W +zuBAeK1+nsK4y91ah7XJ1+UVYqCxwdbk4OdXAAAE7UlEQVR4nO2d7XqiMBBGwaUVQUNVq tXW2l17/9e41g+62zJkJsRMhs75uU/r5vA6YRIoJImiKIqiKIqiKIqiKIqiKIqiKIqiKMr PI1/+cqWecQ/eTj1dl6MePG1yboVOZtuyMGkfTFZsuC06qOdZL70zo2duD5Dc9MvvSvHAb QLxUnkRjFdxM/YkGKvizFeC0SruRh4No1Tc+swwSsVXPxNpxIoHz4bxKfoWPPY35f0tMC/ 7P06G3gVvhinK9dugDdOPr8fvgRumafY6dMM0Ww3dMC13Qzc066EbpiXxpME9XjrFfuiGh tg0tX9Kgd2C8t8S2TEeDIsFch9x+VAE1jty78Ewu0P/PoNiYEMGxdCG4RWDGwZXDG8YWpH BMLAih2FYRRbD5Hkc7tzPY5hMR8FiZDJM6lVVjjO/tO/lchkeedzd+WXVqsho6J271guba vgFNWRFDVGoIStqiEINWWE0rJ3v8iOxaO3mR/b/fVn3MlxO5qNe9/mhAZYr9l8sy/midjb sfZtfEExR7t0M6znDHrAb2SF3MKwrAfldqdKabrj2e4PRjaleyIYeb/MLwnhDNMwD7jf5w RANJ2JmmSvjN5Lh7D7w+PpTbUmG8iJMzRPFUF4VHg0PFEOBEabpnGCYs1y074l5JRiKjLD a4w0lVuFxGbLDG4qMMK3wZ3yZERYTvOFUYoSmzNGGIifSU4RYQ5FVaMY52lBuFWINwQhvv xtlB1qUmxF+FyMvIcHHAHuKtp3D9ivFxwinCdoQivD8NWBmlrVX0LkKcYZQFV4/gxfb4cc YRh0hePizy+FHGEJL+9P5lB2oFWkOP8Iw7giBVuQykSYYQ9lViDGMO0JbFSIM7V8DThCH3 2oIfsaUQegrYCtSfj6MxGYovQrthjKr8N/DbzFEVDIjqMNvMbSeTznBtSLdhuIn0sRmKL8 KLYYDqEKLYdwRIiuoyxBzPuUD24p0GcYdIbYV6TCU386c6DCUGeG3SRA2FL60b4AN444Q3 4qAhgOpwg7DuCMktCKQ4RA60jOQofilfQNgOBtKFUKG7+13WMdeha2Hv91jATwPU9Si4kL 7z0JEESGxFQF+GPhncRNpQswwigiprQhFUGIVthtCdyXEESG1FaFkKGpp30AQjCNCciuCF xTYzpxoMREZITwJ4iMUtrRvQBvGEaHDmg4dodAq/G44tCpEZyiyIz2DNJS3tG9ARii2Cr8 ayqzC7sOPi1DkouKCnAhdrzKgIpQ7kSY4wygidL7KgIlQchX+Zxh1FbpfZUBkKHNp32AXj CNC96sMVkHJ7cyJTxORESImQWuEUpf2DTbDOCLsc7nWFqH0KmwMB1uFtgxld6Rnug0FL+0 buiOUX4UXQ5lViDz8nRFmUXekyMPfFWG1cn+DrjcegdcXoluRrgzTivuPmD8AxoauoE7Di MFPgtwjdQU/CcJVGDWEVoR7qI4QWhHuobpBaUW4x+oGpRXhHqsTpP1N7sE6QeomuQfrAm1 Nxz1aF2gLgjn3cOkQrzIcuMdLh7imgx5fEzHEqwzvwp6bS1+WQ0/oiRb6zsq09dn18ZLRN 8e8v139ppg5WTCpJTxE/orJlnTDZFmJeaBeUbkIHmebVSnCsShXzpt/y70J8z6HPpitW4B XAr2Uw53a7qAoiqIoiqIoiqIoiqIoiqIoiqIoivKz+QtcBHyrUyhNmAAAAABJRU5ErkJgg g==',appMem);  jBitmap1.LoadFromBuffer(appMem, appMem.Size);  bmp := jBitmap1.GetThumbnailImage(jBitmap1.GetImage(), jHorizontalScrollView1.Height);  jHorizontalScrollView1.AddImage(bmp,109, scaleFitXY);  appMem.Free; Try jBitmap1.LoadFromBuffer(appMem.Memory, appMem.Size) ---------------------------------------------------------------------- xinyiman · 2019-11-13 07:58 Quote from: A.S. on November 12, 2019, 08:53:57 pmQuote from: xinyiman on November 12, 2019, 11:50:48 amNow i test this code. Application run but not show my image.  Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i   appMem := TMemoryStream.Create;  Base64ToStream('iVBORw0KGgoAAAANSUhEUgAAAOEAAAD hCAMAAAAJbSJIAAAAb1BMVEX///8AWpwATJXc4+wAUZiluNEAR5MAT5fx9vmDo8UAU5kAS 5WFpMX1+fsAWJsAVZo4cqkAXJ2Op8fe5+/o7/XX4OtqkLkeZqM4c6qWsM11mb9Lfq8sa6W +zuBAeK1+nsK4y91ah7XJ1+UVYqCxwdbk4OdXAAAE7UlEQVR4nO2d7XqiMBBGwaUVQUNVq tXW2l17/9e41g+62zJkJsRMhs75uU/r5vA6YRIoJImiKIqiKIqiKIqiKIqiKIqiKIqiKMr PI1/+cqWecQ/eTj1dl6MePG1yboVOZtuyMGkfTFZsuC06qOdZL70zo2duD5Dc9MvvSvHAb QLxUnkRjFdxM/YkGKvizFeC0SruRh4No1Tc+swwSsVXPxNpxIoHz4bxKfoWPPY35f0tMC/ 7P06G3gVvhinK9dugDdOPr8fvgRumafY6dMM0Ww3dMC13Qzc066EbpiXxpME9XjrFfuiGh tg0tX9Kgd2C8t8S2TEeDIsFch9x+VAE1jty78Ewu0P/PoNiYEMGxdCG4RWDGwZXDG8YWpH BMLAih2FYRRbD5Hkc7tzPY5hMR8FiZDJM6lVVjjO/tO/lchkeedzd+WXVqsho6J271guba vgFNWRFDVGoIStqiEINWWE0rJ3v8iOxaO3mR/b/fVn3MlxO5qNe9/mhAZYr9l8sy/midjb sfZtfEExR7t0M6znDHrAb2SF3MKwrAfldqdKabrj2e4PRjaleyIYeb/MLwnhDNMwD7jf5w RANJ2JmmSvjN5Lh7D7w+PpTbUmG8iJMzRPFUF4VHg0PFEOBEabpnGCYs1y074l5JRiKjLD a4w0lVuFxGbLDG4qMMK3wZ3yZERYTvOFUYoSmzNGGIifSU4RYQ5FVaMY52lBuFWINwQhvv xtlB1qUmxF+FyMvIcHHAHuKtp3D9ivFxwinCdoQivD8NWBmlrVX0LkKcYZQFV4/gxfb4cc YRh0hePizy+FHGEJL+9P5lB2oFWkOP8Iw7giBVuQykSYYQ9lViDGMO0JbFSIM7V8DThCH3 2oIfsaUQegrYCtSfj6MxGYovQrthjKr8N/DbzFEVDIjqMNvMbSeTznBtSLdhuIn0sRmKL8 KLYYDqEKLYdwRIiuoyxBzPuUD24p0GcYdIbYV6TCU386c6DCUGeG3SRA2FL60b4AN444Q3 4qAhgOpwg7DuCMktCKQ4RA60jOQofilfQNgOBtKFUKG7+13WMdeha2Hv91jATwPU9Si4kL 7z0JEESGxFQF+GPhncRNpQswwigiprQhFUGIVthtCdyXEESG1FaFkKGpp30AQjCNCciuCF xTYzpxoMREZITwJ4iMUtrRvQBvGEaHDmg4dodAq/G44tCpEZyiyIz2DNJS3tG9ARii2Cr8 ayqzC7sOPi1DkouKCnAhdrzKgIpQ7kSY4wygidL7KgIlQchX+Zxh1FbpfZUBkKHNp32AXj CNC96sMVkHJ7cyJTxORESImQWuEUpf2DTbDOCLsc7nWFqH0KmwMB1uFtgxld6Rnug0FL+0 buiOUX4UXQ5lViDz8nRFmUXekyMPfFWG1cn+DrjcegdcXoluRrgzTivuPmD8AxoauoE7Di MFPgtwjdQU/CcJVGDWEVoR7qI4QWhHuobpBaUW4x+oGpRXhHqsTpP1N7sE6QeomuQfrAm1 Nxz1aF2gLgjn3cOkQrzIcuMdLh7imgx5fEzHEqwzvwp6bS1+WQ0/oiRb6zsq09dn18ZLRN 8e8v139ppg5WTCpJTxE/orJlnTDZFmJeaBeUbkIHmebVSnCsShXzpt/y70J8z6HPpitW4B XAr2Uw53a7qAoiqIoiqIoiqIoiqIoiqIoiqIoivKz+QtcBHyrUyhNmAAAAABJRU5ErkJgg g==',appMem);  jBitmap1.LoadFromBuffer(appMem, appMem.Size);  bmp := jBitmap1.GetThumbnailImage(jBitmap1.GetImage(), jHorizontalScrollView1.Height);  jHorizontalScrollView1.AddImage(bmp,109, scaleFitXY);  appMem.Free; Try jBitmap1.LoadFromBuffer(appMem.Memory, appMem.Size) Not solved. ---------------------------------------------------------------------- chenyuchih · 2019-11-13 09:38 Is it possible that the string is not an jbitmap stream format after decoding? Did you try loading a image to stream, encoding the stream to string, decoding the string back to new stream, and compared the new stream with the original one? Maybe these steps could help finding the problem. ChenYuChih ---------------------------------------------------------------------- xinyiman · 2019-11-13 09:52 It seems absurd to me. JBitmap correctly displays the image if I pass it in another way. I take the same image and I transform it to base64 and I don't see it anymore. ---------------------------------------------------------------------- xinyiman · 2019-11-13 10:29 If change code from Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i   appMem := TMemoryStream.Create;  Base64ToStream('iVBORw0KGgoAAAANSUhEUgAAAOEAAAD hCAMAAAAJbSJIAAAAb1BMVEX///8AWpwATJXc4+wAUZiluNEAR5MAT5fx9vmDo8UAU5kAS 5WFpMX1+fsAWJsAVZo4cqkAXJ2Op8fe5+/o7/XX4OtqkLkeZqM4c6qWsM11mb9Lfq8sa6W +zuBAeK1+nsK4y91ah7XJ1+UVYqCxwdbk4OdXAAAE7UlEQVR4nO2d7XqiMBBGwaUVQUNVq tXW2l17/9e41g+62zJkJsRMhs75uU/r5vA6YRIoJImiKIqiKIqiKIqiKIqiKIqiKIqiKMr PI1/+cqWecQ/eTj1dl6MePG1yboVOZtuyMGkfTFZsuC06qOdZL70zo2duD5Dc9MvvSvHAb QLxUnkRjFdxM/YkGKvizFeC0SruRh4No1Tc+swwSsVXPxNpxIoHz4bxKfoWPPY35f0tMC/ 7P06G3gVvhinK9dugDdOPr8fvgRumafY6dMM0Ww3dMC13Qzc066EbpiXxpME9XjrFfuiGh tg0tX9Kgd2C8t8S2TEeDIsFch9x+VAE1jty78Ewu0P/PoNiYEMGxdCG4RWDGwZXDG8YWpH BMLAih2FYRRbD5Hkc7tzPY5hMR8FiZDJM6lVVjjO/tO/lchkeedzd+WXVqsho6J271guba vgFNWRFDVGoIStqiEINWWE0rJ3v8iOxaO3mR/b/fVn3MlxO5qNe9/mhAZYr9l8sy/midjb sfZtfEExR7t0M6znDHrAb2SF3MKwrAfldqdKabrj2e4PRjaleyIYeb/MLwnhDNMwD7jf5w RANJ2JmmSvjN5Lh7D7w+PpTbUmG8iJMzRPFUF4VHg0PFEOBEabpnGCYs1y074l5JRiKjLD a4w0lVuFxGbLDG4qMMK3wZ3yZERYTvOFUYoSmzNGGIifSU4RYQ5FVaMY52lBuFWINwQhvv xtlB1qUmxF+FyMvIcHHAHuKtp3D9ivFxwinCdoQivD8NWBmlrVX0LkKcYZQFV4/gxfb4cc YRh0hePizy+FHGEJL+9P5lB2oFWkOP8Iw7giBVuQykSYYQ9lViDGMO0JbFSIM7V8DThCH3 2oIfsaUQegrYCtSfj6MxGYovQrthjKr8N/DbzFEVDIjqMNvMbSeTznBtSLdhuIn0sRmKL8 KLYYDqEKLYdwRIiuoyxBzPuUD24p0GcYdIbYV6TCU386c6DCUGeG3SRA2FL60b4AN444Q3 4qAhgOpwg7DuCMktCKQ4RA60jOQofilfQNgOBtKFUKG7+13WMdeha2Hv91jATwPU9Si4kL 7z0JEESGxFQF+GPhncRNpQswwigiprQhFUGIVthtCdyXEESG1FaFkKGpp30AQjCNCciuCF xTYzpxoMREZITwJ4iMUtrRvQBvGEaHDmg4dodAq/G44tCpEZyiyIz2DNJS3tG9ARii2Cr8 ayqzC7sOPi1DkouKCnAhdrzKgIpQ7kSY4wygidL7KgIlQchX+Zxh1FbpfZUBkKHNp32AXj CNC96sMVkHJ7cyJTxORESImQWuEUpf2DTbDOCLsc7nWFqH0KmwMB1uFtgxld6Rnug0FL+0 buiOUX4UXQ5lViDz8nRFmUXekyMPfFWG1cn+DrjcegdcXoluRrgzTivuPmD8AxoauoE7Di MFPgtwjdQU/CcJVGDWEVoR7qI4QWhHuobpBaUW4x+oGpRXhHqsTpP1N7sE6QeomuQfrAm1 Nxz1aF2gLgjn3cOkQrzIcuMdLh7imgx5fEzHEqwzvwp6bS1+WQ0/oiRb6zsq09dn18ZLRN 8e8v139ppg5WTCpJTxE/orJlnTDZFmJeaBeUbkIHmebVSnCsShXzpt/y70J8z6HPpitW4B XAr2Uw53a7qAoiqIoiqIoiqIoiqIoiqIoiqIoivKz+QtcBHyrUyhNmAAAAABJRU5ErkJgg g==',appMem);  jBitmap1.LoadFromBuffer(appMem.Memory, appMem.Size);  bmp := jBitmap1.GetThumbnailImage(jBitmap1.GetImage(), jHorizontalScrollView1.Height);  jHorizontalScrollView1.AddImage(bmp,108, scaleFitXY);  appMem.Free;       to Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i   appMem := TMemoryStream.Create;  Base64ToStream('iVBORw0KGgoAAAANSUhEUgAAAOEAAAD hCAMAAAAJbSJIAAAAb1BMVEX///8AWpwATJXc4+wAUZiluNEAR5MAT5fx9vmDo8UAU5kAS 5WFpMX1+fsAWJsAVZo4cqkAXJ2Op8fe5+/o7/XX4OtqkLkeZqM4c6qWsM11mb9Lfq8sa6W +zuBAeK1+nsK4y91ah7XJ1+UVYqCxwdbk4OdXAAAE7UlEQVR4nO2d7XqiMBBGwaUVQUNVq tXW2l17/9e41g+62zJkJsRMhs75uU/r5vA6YRIoJImiKIqiKIqiKIqiKIqiKIqiKIqiKMr PI1/+cqWecQ/eTj1dl6MePG1yboVOZtuyMGkfTFZsuC06qOdZL70zo2duD5Dc9MvvSvHAb QLxUnkRjFdxM/YkGKvizFeC0SruRh4No1Tc+swwSsVXPxNpxIoHz4bxKfoWPPY35f0tMC/ 7P06G3gVvhinK9dugDdOPr8fvgRumafY6dMM0Ww3dMC13Qzc066EbpiXxpME9XjrFfuiGh tg0tX9Kgd2C8t8S2TEeDIsFch9x+VAE1jty78Ewu0P/PoNiYEMGxdCG4RWDGwZXDG8YWpH BMLAih2FYRRbD5Hkc7tzPY5hMR8FiZDJM6lVVjjO/tO/lchkeedzd+WXVqsho6J271guba vgFNWRFDVGoIStqiEINWWE0rJ3v8iOxaO3mR/b/fVn3MlxO5qNe9/mhAZYr9l8sy/midjb sfZtfEExR7t0M6znDHrAb2SF3MKwrAfldqdKabrj2e4PRjaleyIYeb/MLwnhDNMwD7jf5w RANJ2JmmSvjN5Lh7D7w+PpTbUmG8iJMzRPFUF4VHg0PFEOBEabpnGCYs1y074l5JRiKjLD a4w0lVuFxGbLDG4qMMK3wZ3yZERYTvOFUYoSmzNGGIifSU4RYQ5FVaMY52lBuFWINwQhvv xtlB1qUmxF+FyMvIcHHAHuKtp3D9ivFxwinCdoQivD8NWBmlrVX0LkKcYZQFV4/gxfb4cc YRh0hePizy+FHGEJL+9P5lB2oFWkOP8Iw7giBVuQykSYYQ9lViDGMO0JbFSIM7V8DThCH3 2oIfsaUQegrYCtSfj6MxGYovQrthjKr8N/DbzFEVDIjqMNvMbSeTznBtSLdhuIn0sRmKL8 KLYYDqEKLYdwRIiuoyxBzPuUD24p0GcYdIbYV6TCU386c6DCUGeG3SRA2FL60b4AN444Q3 4qAhgOpwg7DuCMktCKQ4RA60jOQofilfQNgOBtKFUKG7+13WMdeha2Hv91jATwPU9Si4kL 7z0JEESGxFQF+GPhncRNpQswwigiprQhFUGIVthtCdyXEESG1FaFkKGpp30AQjCNCciuCF xTYzpxoMREZITwJ4iMUtrRvQBvGEaHDmg4dodAq/G44tCpEZyiyIz2DNJS3tG9ARii2Cr8 ayqzC7sOPi1DkouKCnAhdrzKgIpQ7kSY4wygidL7KgIlQchX+Zxh1FbpfZUBkKHNp32AXj CNC96sMVkHJ7cyJTxORESImQWuEUpf2DTbDOCLsc7nWFqH0KmwMB1uFtgxld6Rnug0FL+0 buiOUX4UXQ5lViDz8nRFmUXekyMPfFWG1cn+DrjcegdcXoluRrgzTivuPmD8AxoauoE7Di MFPgtwjdQU/CcJVGDWEVoR7qI4QWhHuobpBaUW4x+oGpRXhHqsTpP1N7sE6QeomuQfrAm1 Nxz1aF2gLgjn3cOkQrzIcuMdLh7imgx5fEzHEqwzvwp6bS1+WQ0/oiRb6zsq09dn18ZLRN 8e8v139ppg5WTCpJTxE/orJlnTDZFmJeaBeUbkIHmebVSnCsShXzpt/y70J8z6HPpitW4B XAr2Uw53a7qAoiqIoiqIoiqIoiqIoiqIoiqIoivKz+QtcBHyrUyhNmAAAAABJRU5ErkJgg g==',appMem);  jBitmap1.LoadFromBuffer(appMem.Memory, appMem.Size);  bmp := jBitmap1.GetImage(); //jBitmap1.GetThumbnailImage(jBitmap1.GetImage(), jHorizontalScrollView1.Height);  jHorizontalScrollView1.AddImage(bmp,108, scaleFitXY);  appMem.Free;       I see the image. But is not ThumbnailImage. For me is a bug of lamw. ---------------------------------------------------------------------- xinyiman · 2019-11-14 08:39 In this way the code works. So I am increasingly inclined to think that there is a bug in: GetThumbnailImage Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i   appMem := TMemoryStream.Create;  Base64ToStream('iVBORw0KGgoAAAANSUhEUgAAAOEAAAD hCAMAAAAJbSJIAAAAb1BMVEX///8AWpwATJXc4+wAUZiluNEAR5MAT5fx9vmDo8UAU5kAS 5WFpMX1+fsAWJsAVZo4cqkAXJ2Op8fe5+/o7/XX4OtqkLkeZqM4c6qWsM11mb9Lfq8sa6W +zuBAeK1+nsK4y91ah7XJ1+UVYqCxwdbk4OdXAAAE7UlEQVR4nO2d7XqiMBBGwaUVQUNVq tXW2l17/9e41g+62zJkJsRMhs75uU/r5vA6YRIoJImiKIqiKIqiKIqiKIqiKIqiKIqiKMr PI1/+cqWecQ/eTj1dl6MePG1yboVOZtuyMGkfTFZsuC06qOdZL70zo2duD5Dc9MvvSvHAb QLxUnkRjFdxM/YkGKvizFeC0SruRh4No1Tc+swwSsVXPxNpxIoHz4bxKfoWPPY35f0tMC/ 7P06G3gVvhinK9dugDdOPr8fvgRumafY6dMM0Ww3dMC13Qzc066EbpiXxpME9XjrFfuiGh tg0tX9Kgd2C8t8S2TEeDIsFch9x+VAE1jty78Ewu0P/PoNiYEMGxdCG4RWDGwZXDG8YWpH BMLAih2FYRRbD5Hkc7tzPY5hMR8FiZDJM6lVVjjO/tO/lchkeedzd+WXVqsho6J271guba vgFNWRFDVGoIStqiEINWWE0rJ3v8iOxaO3mR/b/fVn3MlxO5qNe9/mhAZYr9l8sy/midjb sfZtfEExR7t0M6znDHrAb2SF3MKwrAfldqdKabrj2e4PRjaleyIYeb/MLwnhDNMwD7jf5w RANJ2JmmSvjN5Lh7D7w+PpTbUmG8iJMzRPFUF4VHg0PFEOBEabpnGCYs1y074l5JRiKjLD a4w0lVuFxGbLDG4qMMK3wZ3yZERYTvOFUYoSmzNGGIifSU4RYQ5FVaMY52lBuFWINwQhvv xtlB1qUmxF+FyMvIcHHAHuKtp3D9ivFxwinCdoQivD8NWBmlrVX0LkKcYZQFV4/gxfb4cc YRh0hePizy+FHGEJL+9P5lB2oFWkOP8Iw7giBVuQykSYYQ9lViDGMO0JbFSIM7V8DThCH3 2oIfsaUQegrYCtSfj6MxGYovQrthjKr8N/DbzFEVDIjqMNvMbSeTznBtSLdhuIn0sRmKL8 KLYYDqEKLYdwRIiuoyxBzPuUD24p0GcYdIbYV6TCU386c6DCUGeG3SRA2FL60b4AN444Q3 4qAhgOpwg7DuCMktCKQ4RA60jOQofilfQNgOBtKFUKG7+13WMdeha2Hv91jATwPU9Si4kL 7z0JEESGxFQF+GPhncRNpQswwigiprQhFUGIVthtCdyXEESG1FaFkKGpp30AQjCNCciuCF xTYzpxoMREZITwJ4iMUtrRvQBvGEaHDmg4dodAq/G44tCpEZyiyIz2DNJS3tG9ARii2Cr8 ayqzC7sOPi1DkouKCnAhdrzKgIpQ7kSY4wygidL7KgIlQchX+Zxh1FbpfZUBkKHNp32AXj CNC96sMVkHJ7cyJTxORESImQWuEUpf2DTbDOCLsc7nWFqH0KmwMB1uFtgxld6Rnug0FL+0 buiOUX4UXQ5lViDz8nRFmUXekyMPfFWG1cn+DrjcegdcXoluRrgzTivuPmD8AxoauoE7Di MFPgtwjdQU/CcJVGDWEVoR7qI4QWhHuobpBaUW4x+oGpRXhHqsTpP1N7sE6QeomuQfrAm1 Nxz1aF2gLgjn3cOkQrzIcuMdLh7imgx5fEzHEqwzvwp6bS1+WQ0/oiRb6zsq09dn18ZLRN 8e8v139ppg5WTCpJTxE/orJlnTDZFmJeaBeUbkIHmebVSnCsShXzpt/y70J8z6HPpitW4B XAr2Uw53a7qAoiqIoiqIoiqIoiqIoiqIoiqIoivKz+QtcBHyrUyhNmAAAAABJRU5ErkJgg g==',appMem);  jBitmap1.LoadFromBuffer(appMem.Memory, appMem.Size);  //bmp := jBitmap1.GetThumbnailImage(jBitmap1.GetImage(), jHorizontalScrollView1.Height);  bmp := jBitmap1.GetResizedBitmap(jBitmap1.GetImage(), jHorizontalScrollView1.Height, jHorizontalScrollView1.Height);  jHorizontalScrollView1.AddImage(bmp,108, scaleFitXY);  appMem.Free; ---------------------------------------------------------------------- kordal · 2019-11-14 09:14 If you open jBitmap.java and look at the GetThumbnailImage(Bitmap _bitmap, int _thumbnailSize) method, it immediately becomes clear why it does not work. Code: Java  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i public Bitmap GetThumbnailImage(Bitmap _bitmap, int _thumbnailSize) {        Bitmap thumbnailImage = null;        try {            int width = thumbnailImage.getWidth();            int height = thumbnailImage.getHeight();            float ratio = width/height;           if (width >= height)                ratio = width/height;          else                ratio = height/width;             thumbnailImage = ThumbnailUtils.extractThumbnail(thumbnailImage,(int)(_thumbnailSize * ratio), _thumbnailSize);            //imageBitmap = Bitmap.createScaledBitmap(_bitmap, (int)(_thumbnailSize * ratio), _thumbnailSize, false);        }        catch(Exception ex) {          //        }        return thumbnailImage;    }  Use another method GetThumbnailImage (Bitmap _bitmap, int _width, int _height), or edit the current one. I would do it like this: Code: Java  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i public Bitmap GetThumbnailImage(Bitmap _bitmap, int _thumbnailSize) {        Bitmap thumbnailImage = null;        try {          int width = _bitmap.getWidth();            int height = _bitmap.getHeight();            float ratio = width / height;           if (width >= height)                ratio = width / height;          else                ratio = height / width;             thumbnailImage = ThumbnailUtils.extractThumbnail(_bitmap, (int)(_thumbnailSize * ratio),  _thumbnailSize);        }        catch(Exception ex) {            //        }        return thumbnailImage;    }  In Laz_and_controls.pas unit, you can add method: LoadFromStream (Stream: TStream) Code: Pascal  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i //....  jBitmap = class(jControl)  // ...  public    procedure LoadFromStream(Stream: TStream);  // ...  end;   implementation   // ...  procedure jBitmap.LoadFromStream(Stream: TStream);  begin    if FInitialized then      jBitmap_LoadFromBuffer(FjEnv, FjObject, Stream.Memory, Stream.Size);      end; ---------------------------------------------------------------------- xinyiman · 2019-11-14 15:40 Thanks for the tips But I don't want to touch the Lamw code. Because maintained by jmpessoa. If he then updates something I lose everything in the next update. I hope he updates the project with your advice. ---------------------------------------------------------------------- jmpessoa · 2019-11-14 17:26 Ok! I will commit the kordal fix and improvemments! Thanks! Edited: Done!!!!! ---------------------------------------------------------------------- kordal · 2019-11-14 21:46 Late noticed, this is not critical, there is one unnecessary division: Code: Java  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i  float ratio = width / height; replace: Code: Java  [Select][+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i  float ratio = 1;