Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Gráficos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-08-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.744
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Creo que no es correcto porque liberas el stream antes de devolverlo

Código Delphi [-]
function TServerMethods1.GetImagenBannerAsStream(ASQLQuery: TSQLQuery;
  AIDBanner: Integer): TStream;
var
 stream: TMemoryStream;
 MiImagenDB: TImage;
begin
  if (ASQLQuery.Active) then ASQLQuery.Close();
  with ASQLQuery do
  begin
    ParamByName('id_articulo').AsInteger := AIDBanner;
    Open;
  end;
  //
  stream := TMemoryStream.Create; <== AQUI CREAS EL STREAM
  MiImagenDB := TImage.Create(MiImagenDB);
  try
    MiImagenDB.Picture.LoadFromFile(qArtImagenIMAGEN.AsString);
    MiImagenDB.Update;
    MiImagenDB.Picture.SaveToStream(stream);

  finally
    MiImagenDB.Free;
    Result := stream; <== AQUI DEVUELVES EL STREAM QUE SERA LIBREADO EN LA SIGUIENTE LINEA
    stream.Free; <== AQUI LIBERAS EL STREAM
  end;
  ASQLQuery.Close;
end;


Código Delphi [-]
function TServerMethods1.GetImagenBannerAsStream(ASQLQuery: TSQLQuery;
  AIDBanner: Integer): TStream;
var
 MiImagenDB: TImage;
begin
  if (ASQLQuery.Active) then ASQLQuery.Close();
  with ASQLQuery do
  begin
    ParamByName('id_articulo').AsInteger := AIDBanner;
    Open;
  end;
  
  // AQUI CREAS EL STREAM
  // Quien lo consuma, deberá encargarse de librear la memoria
  Result := TMemoryStream.Create;
  try
    MiImagenDB := TImage.Create(MiImagenDB);
    try
      MiImagenDB.Picture.LoadFromFile(qArtImagenIMAGEN.AsString);
      MiImagenDB.Update;
      MiImagenDB.Picture.SaveToStream(Result);

    finally
      MiImagenDB.Free;
    end;
  except
    // libero el stream si hubo algun problema
    Result.Free;
  end;
  ASQLQuery.Close;
end;

[...]

var
 AStream: TMemoryStream;
begin
  AStream := GetImagenBannerAsStream(Q, 1234);
  try
     // Hacer algo con el Stream
  finally
     AStream.Free;
  end;
end;

Última edición por duilioisola fecha: 08-08-2022 a las 11:05:58. Razón: Evito MemoryLeak si hay errores.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como puedo convertir una imagen a una imagen semitransparente? antonio302050 Gráficos 0 27-03-2010 17:01:48
poner imagen a un fichero exe kapullok_2006 Varios 2 30-11-2007 17:54:54
Insertar imagen en fichero rtf jmiergarcia Gráficos 2 24-10-2006 00:39:10
Codificar una imagen o un fichero D@byt Varios 1 27-05-2005 01:44:32
Convertir fichero RTF a TXT Nuria Varios 5 02-12-2003 10:03:29


La franja horaria es GMT +2. Ahora son las 15:37:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi