Buenas a tod@s.
Trabajando en el tema del QR para VeriFactu he hecho una función para generarlo y devolvérmelo en modo stream para guardarlo en la tabla e imprimirlo en la factura posteriormente.
El tema es que he creado una función aprovechando y retocando un componente que publicó el compañero
escafandra en otro foro tal que así:
Código Delphi
[-]
function DameQRIMG(QRText: String): TMemoryStream;
var
QR: TQRCodeImage;
Stream: TMemoryStream;
Bitmap: TBitmap;
GR: TGraphic;
Jpg: TJpegImage;
begin
QR:=TQRCodeImage.Create(nil);
QR.Width := 169;
QR.Height:= QR.Width;
QR.Text := QRText;
GR:=TGraphic.Create;
GR:=QR.Picture.Graphic;
Bitmap:= TBitmap.Create;
try
Bitmap.Width:= QR.Width;
Bitmap.Height:= QR.Width;
Bitmap.Canvas.StretchDraw(Bitmap.Canvas.ClipRect,GR);
jpg := TJPEGImage.Create;
jpg.Assign(Bitmap);
Stream:=tmemorystream.Create;
jpg.SaveToStream(Stream);
finally
Result:=Stream;
Bitmap.Free;
Jpg.Free;
end;
end;
En la que la llamo con el texto del QR y me devuelve un stream con la imagen. Hasta aquí todo bien.
El problema es si le hago un "Free" a la variable Stream que previamente he creado, he asignado y luego he igualado "Result" a ella. Si hago el "Free" me da un error y si lo quito funciona bien pero no sé si eso irá consumiendo memoria en cada llamada hasta el infinito y más allá.
Alguien me podría decir si no hago el "Free" tendré problemas de memoria o si se libera solo de alguna manera, o en caso contrario, cómo puedo liberarlo sin que me de error.
Gracias y un saludo.