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 06-08-2022
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Convertir de un fichero a Stream una imagen

Hola chicos:

Tengo una aplicación utilizando DataSnap la cual aún manejo el componente DBExpress aun no he pasado a FireDac pero la aplicación corre de maravillas la cual desde dispositivos Android realizo consulta y efectuó actualización por cierto es del 2015 ahora revisando noté que algunos clientes ah almacenado imagenes en formato png o jpeg a los artículos pero en la db no se guarda la imagen en formato blob pero mientras que la aplicación se guarda en una ruta en el servidor en su respectiva carpeta de imágenes ejemplo

CAMPO TIPO
ID_ART INTEGER
NOMBRE VARCHAR(100)
IMAGEN VARCHAR(150)

VALOR
C:\MI PROGRAMA\IMAGENES\FOTO1.PNG

Encontré este link interesante: https://delphibasico.com/2013/03/25/...magen-parte-2/ la cual es lo que considero que funcionaría sin embargo mi primera limitación es que cree esta función para tratar de convertir dicha ruta y salvar en un Stream

ejemplo:

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;
  MiImagenDB := TImage.Create(MiImagenDB);
  try
    MiImagenDB.Picture.LoadFromFile(qArtImagenIMAGEN.AsString);
    MiImagenDB.Update;
    MiImagenDB.Picture.SaveToStream(stream);

  finally
    MiImagenDB.Free;
    Result := stream;
    stream.Free;
  end;
  ASQLQuery.Close;
end;

lo que hice es correcto es posible?

Saludos

novato_erick
Responder Con Cita
  #2  
Antiguo 08-08-2022
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
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 20:08:51.


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