Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-01-2023
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Debes convertir la imagen que hay en el TImage.
Aquí tienes una función para hacerlo en FMX:
https://stackoverflow.com/questions/...eg-compression
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #2  
Antiguo 10-01-2023
giantonti1801 giantonti1801 is offline
Miembro
 
Registrado: oct 2022
Posts: 143
Poder: 2
giantonti1801 Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Debes convertir la imagen que hay en el TImage.
Aquí tienes una función para hacerlo en FMX:
https://stackoverflow.com/questions/...eg-compression

cualquiera de los métodos que valla aplicar requiere que coloque en el uses el JPEG y es allí donde estoy teniendo problema (adjunto imagen de Error)

Última edición por giantonti1801 fecha: 29-03-2023 a las 20:43:36.
Responder Con Cita
  #3  
Antiguo 10-01-2023
giantonti1801 giantonti1801 is offline
Miembro
 
Registrado: oct 2022
Posts: 143
Poder: 2
giantonti1801 Va por buen camino
Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Debes convertir la imagen que hay en el TImage.
Aquí tienes una función para hacerlo en FMX:
https://stackoverflow.com/questions/...eg-compression
Como puedo aplicar este código a mi proyecto ya que la imagen la tengo en IMAGE1.BITMAP
Código Delphi [-]
var
  NewBitmap: TBitmap;
  MS1 : TMemoryStream;
  Surf: TBitmapSurface;
  JpgQuality : TBitmapCodecSaveParams;
begin
  NewBitmap := TBitmap.CreateFromFile('input.bmp');
  MS1 := TMemoryStream.Create;
  Surf := TBitmapSurface.create;

  try
    MS1.Position := 0;
    Surf.Assign(NewBitmap);
    JpgQuality.Quality := 100;

    if not TBitmapCodecManager.SaveToStream(MS1, Surf, '.jpg', @JpgQuality) then
      raise EBitmapSavingFailed.Create('Error saving Bitmap to jpg');

    MS1.SaveToFile('ouput.jpg');
  finally
    NewBitmap.Free;
    MS1.Free;
    Surf.Free;
  end;
end;

ya logre solucionar el problema que tenía con el JPEG tuve que agregar estos USES
Código Delphi [-]
System.ImageList, FMX.Surfaces
Responder Con Cita
  #4  
Antiguo 10-01-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Te aconsejo que para que ocupe menos la imagen la comprimas más, en lugar de:
Código Delphi [-]
JpgQuality.Quality := 100;
Puedes poner, ejemplo:
Código Delphi [-]
JpgQuality.Quality := 70;
En una imagen de 2560x1400 en jpg que ocupa 1,1 MB, si se guarda con compresión 70 entonces ocupa 171 KB




Responder Con Cita
  #5  
Antiguo 10-01-2023
giantonti1801 giantonti1801 is offline
Miembro
 
Registrado: oct 2022
Posts: 143
Poder: 2
giantonti1801 Va por buen camino
Me parece excelente pero donde coloco esta función en mi código?

Última edición por Casimiro Notevi fecha: 10-01-2023 a las 19:02:38.
Responder Con Cita
  #6  
Antiguo 10-01-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por giantonti1801 Ver Mensaje
Me parece excelente pero donde coloco esta función en mi código?
Código Delphi [-]
var
  NewBitmap: TBitmap;
  MS1 : TMemoryStream;
  Surf: TBitmapSurface;
  JpgQuality : TBitmapCodecSaveParams;
begin
  NewBitmap := TBitmap.CreateFromFile('input.bmp');
  MS1 := TMemoryStream.Create;
  Surf := TBitmapSurface.create;

  try
    MS1.Position := 0;
    Surf.Assign(NewBitmap);
    JpgQuality.Quality := 100;   //   <<<-------------  ¡¡¡ AQUÍ !!!   

    if not TBitmapCodecManager.SaveToStream(MS1, Surf, '.jpg', @JpgQuality) then
      raise EBitmapSavingFailed.Create('Error saving Bitmap to jpg');

    MS1.SaveToFile('ouput.jpg');
  finally
    NewBitmap.Free;
    MS1.Free;
    Surf.Free;
  end;
end;
Responder Con Cita
  #7  
Antiguo 10-01-2023
giantonti1801 giantonti1801 is offline
Miembro
 
Registrado: oct 2022
Posts: 143
Poder: 2
giantonti1801 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Código Delphi [-]
var
  NewBitmap: TBitmap;
  MS1 : TMemoryStream;
  Surf: TBitmapSurface;
  JpgQuality : TBitmapCodecSaveParams;
begin
  NewBitmap := TBitmap.CreateFromFile('input.bmp');
  MS1 := TMemoryStream.Create;
  Surf := TBitmapSurface.create;

  try
    MS1.Position := 0;
    Surf.Assign(NewBitmap);
    JpgQuality.Quality := 100;   //   <<<-------------  ¡¡¡ AQUÍ !!!   

    if not TBitmapCodecManager.SaveToStream(MS1, Surf, '.jpg', @JpgQuality) then
      raise EBitmapSavingFailed.Create('Error saving Bitmap to jpg');

    MS1.SaveToFile('ouput.jpg');
  finally
    NewBitmap.Free;
    MS1.Free;
    Surf.Free;
  end;
end;
No hay manera de hacerlo de esta forma. El problema radica que yo estoy tomando una con el dispositivo movil y lo estoy guardando un IMAGE1.BITMAP luego aunque en diversos intentos es tomar la foto ya convertida en el
Código Delphi [-]
MS1 := TMemoryStream.Create;
y pasarla a la base de datos pero no lo he logrado
Código Delphi [-]
uniQueryIMGFOTO.LoadFromStream(MS1);
esta puede ser mi única alternativa. hay que tomar en cuenta que todo se está realizando en un dispositivo movil Antroid/Ios.

Código Delphi [-]
procedure TFormPrincipalTab.Timer_FINTimer(Sender: TObject);
var
Image: TBitmap;
bmp: TBitmap;
NewBitmap: TBitmap;
MS1 : TMemoryStream;
Surf: TBitmapSurface;
JpgQuality : TBitmapCodecSaveParams;
begin
  LabelCuentaRegresiva.Text := '0';
  Timer_N1.Enabled := false;
  LabelCuentaRegresiva.Visible := false;
  cancel := false;
  SetupSoundFoto('camara_51.mp3');
  PlaySoundFoto;
  {$IFDEF ANDROID}
  CameraComponent1.SampleBufferToBitmap(Image4.Bitmap, true);
  CameraComponent1.Active := false;
  {$ENDIF}
  begin
   NewBitmap := image4.bitmap;//TBitmap.CreateFromFile('input.bmp');
   MS1 := TMemoryStream.Create;
   Surf := TBitmapSurface.create;
   try
   MS1.Position := 0;
   Surf.Assign(NewBitmap);
   JpgQuality.Quality := 70;
     if not TBitmapCodecManager.SaveToStream(MS1, Surf, '.jpg', @JpgQuality) then
     raise EBitmapSavingFailed.Create('Error saving Bitmap to jpg');
     MS1.SaveToFile('ouput.jpg');

       begin
          if Label26.Text = 'InExistente' then
            begin
             LabelNumeroDpto.Text := labelDpto.Text;
             LabelNombreVis.Text := Edit1.Text;
                begin
                UniQueryVisitantesVal.Close;
                UniQueryVisitantesVal.SQL.Clear;
                UniQueryVisitantesVal.SQL.Add('INSERT INTO visitantes (Nom_Vis,Apell_Vis,Rut_Vis,Foto,Num_dep_Vis,Edif_vis,Estatus,Usuario_mod,)');           //
                UniQueryVisitantesVal.SQL.Add('VALUES (:Nom_Vis, :Apell_Vis, :Rut_Vis, :Foto, :Num_dep_Vis, :Edif_vis, :Estatus, :Usuario_mod, )');                      //,
                UniQueryVisitantesVal.ParamByName('Nom_vis').AsString := LabelNombreVis.text;
                UniQueryVisitantesVal.ParamByName('Rut_Vis').AsString := LabelRutVis.Text;
                UniQueryVisitantesVal.ParamByName('Num_dep_Vis').Asstring := LabelNumeroDpto.text;
                UniQueryVisitantesVal.ParamByName('Edif_vis').AsString := LabelEdificio.text;
                UniQueryVisitantesVal.ParamByName('Estatus').AsString := 'ACT';
                UniQueryVisitantesVal.ParamByName('Usuario_mod').Asstring := 'TOTEM';
                //UniQueryVisitantesVal.ParamByName('otro').Asstring := 'E';
                UniQueryVisitantesVal.ExecSQL;
                   begin
                   UniQueryIMG.Close;
                   UniQueryIMG.SQL.Clear;
                   UniQueryIMG.SQL.Add('UPDATE IMG SET FOTO = :FOTO, OTRO1 = :OTRO1, MODULO = :MODULO where OTRO1  = ''I'' and MODULO = ''VISITANTES''');
                   UniQueryIMG.ParamByName('OTRO1').AsString := '';
                   UniQueryIMGFOTO.LoadFromFile('Ouput.jpg');
                   uniQueryIMGFOTO.LoadFromStream(MS1);
                   UniQueryIMG.ExecSQL;
                   end;

                      begin
                      UniQueryVisitasIngreso.Close;
                      UniQueryVisitasIngreso.SQL.Clear;
                      UniQueryVisitasIngreso.SQL.Add('INSERT INTO visitas (Nom_Vis,Apell_Vis,Rut__Vis,Foto,Num_dep_Vis,Piso__Vis,Edif_Vis,Hora_In_Vis, Num_Vis,Usuario_mod,otro)');           //
                      UniQueryVisitasIngreso.SQL.Add('VALUES (:Nom_Vis, :Apell_Vis, :Rut__Vis, :Foto, :Num_dep_Vis, :Piso__Vis, :Edif_Vis, :Hora_In_Vis, :Num_Vis, :Usuario_mod, tro)');                      //,
                      UniQueryVisitasIngreso.ParamByName('Nom_vis').AsString := LabelNombreVis.text;
                      UniQueryVisitasIngreso.ParamByName('Rut__Vis').AsString := LabelRutVis.Text;
                      UniQueryVisitasIngreso.ParamByName('Num_dep_Vis').Asstring := LabelNumeroDpto.text;
                      UniQueryVisitasIngreso.ParamByName('Piso__Vis').AsString := LabelPisoINF.text;
                      UniQueryVisitasIngreso.ParamByName('Edif_Vis').AsString := LabelEdificio.text;
                      UniQueryVisitasIngreso.ParamByName('Hora_In_Vis').AsDateTime := Now;
                      UniQueryVisitasIngreso.ParamByName('Num_Vis').AsString := 'XXX';
                      UniQueryVisitasIngreso.ParamByName('Usuario_mod').Asstring := 'TOTEM';
                      UniQueryVisitasIngreso.ParamByName('otro').Asstring := 'E';
                      UniQueryVisitasIngreso.ExecSQL;
                      end;

                        begin
                        UniQueryIMG.Close;
                        UniQueryIMG.SQL.Clear;
                        UniQueryIMG.SQL.Add('UPDATE IMG SET FOTO = :FOTO, OTRO1 = :OTRO1 where OTRO1  = ''I'' and MODULO = ''VISITAS''');
                        UniQueryIMG.ParamByName('OTRO1').AsString := '';
                        uniQueryIMGFOTO.LoadFromStream(MS1);
                        UniQueryIMG.ExecSQL;
                        end;
                end;
             TabControl1.ActiveTab := TblEspera;
             LayoutEspera.Visible := true;
             FloatAnimation7.Enabled := true;
             Timer1.Enabled := true;
             Timer_fin.Enabled := false;
            end
      // end
            else
             begin
                LabelNumeroDpto.Text := labelDpto.Text;
                LabelNombreVis.Text := Edit1.Text;
                begin
                UniQueryVisitasIngreso.Close;
                UniQueryVisitasIngreso.SQL.Clear;
                UniQueryVisitasIngreso.SQL.Add('INSERT INTO visitas (Nom_Vis,Apell_Vis,Rut__Vis,Foto,Num_dep_Vis,Piso__Vis,Edif_Vis,Hora_In_Vis, Num_Vis,Usuario_mod,otro)');           //
                UniQueryVisitasIngreso.SQL.Add('VALUES (:Nom_Vis, :Apell_Vis, :Rut__Vis, :Foto, :Num_dep_Vis, :Piso__Vis, :Edif_Vis, :Hora_In_Vis, :Num_Vis, :Usuario_mod, tro)');                      //,
                UniQueryVisitasIngreso.ParamByName('Nom_vis').AsString := LabelNombreVis.text;
                UniQueryVisitasIngreso.ParamByName('Rut__Vis').AsString := LabelRutVis.Text;
                UniQueryVisitasIngreso.ParamByName('Num_dep_Vis').Asstring := LabelNumeroDpto.text;
                UniQueryVisitasIngreso.ParamByName('Piso__Vis').AsString := LabelPisoINF.text;
                UniQueryVisitasIngreso.ParamByName('Edif_Vis').AsString := LabelEdificio.text;
                UniQueryVisitasIngreso.ParamByName('Hora_In_Vis').AsDateTime := Now;
                UniQueryVisitasIngreso.ParamByName('Num_Vis').AsString := 'XXX';
                UniQueryVisitasIngreso.ParamByName('Usuario_mod').Asstring := 'TOTEM';
                UniQueryVisitasIngreso.ParamByName('otro').Asstring := 'E';
                UniQueryVisitasIngreso.ExecSQL;
                  begin
                  UniQueryIMG.Close;
                  UniQueryIMG.SQL.Clear;
                  UniQueryIMG.SQL.Add('UPDATE IMG SET FOTO = :FOTO, OTRO1 = :OTRO1 where OTRO1  = ''I'' and MODULO = ''VISITAS''');
                  UniQueryIMG.ParamByName('OTRO1').AsString := '';
                  uniQueryIMGFOTO.LoadFromStream(MS1) ;
                  UniQueryIMG.ExecSQL;
                  end;
                end;
              TabControl1.ActiveTab := TblEspera;
              LayoutEspera.Visible := true;
              FloatAnimation7.Enabled := true;
              Timer1.Enabled := true;
              Timer_fin.Enabled := false;
              ColorAnimation1.Enabled := false;
             end;

       end;
    finally
    //NewBitmap.Free;  //Los estoy comentando ya que uno de los dos me esta dando problema cerrandome la aplicacion
    MS1.Free;
    //Surf.Free;       //Los estoy comentando ya que uno de los dos me esta dando problema cerrandome la aplicacion


   end;

  end;
end;
Responder Con Cita
  #8  
Antiguo 11-01-2023
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Veo alguna cosa rara.
  • Quizás el error no es que no guarde la imagen comprimida sinó que "no guarde".
  • El Query está cerrado y estás modificando el valor de un campo.
  • Hay parámetros que no estás rellenando, por lo que puede ser que tengan valor nulo y por lo tanto no modifiquen ningún registro.

Código Delphi [-]
[...]
   UniQueryIMG.Close;
   UniQueryIMG.SQL.Clear;
   UniQueryIMG.SQL.Add('UPDATE IMG SET FOTO = :FOTO, OTRO1 = :OTRO1, MODULO = :MODULO where OTRO1  = ''I'' and MODULO = ''VISITANTES''');
   UniQueryIMG.ParamByName('OTRO1').AsString := '';

   { Aquí estás rellenando campos y no los parámetros del query.
     Por lógica se necesita rellenar los parámetros.
     Puede ser que el componente los rellene con el valor del campo, pero al estar cerrado el query no le veo la lógica.
     Incluso con algunos componentes te debería estar dando un error de "Dataset not in Edit or Insert mode" o algo parecido.
     Además lo estás haciendo dos veces y de forma diferente.
   UniQueryIMGFOTO.LoadFromFile('Ouput.jpg');
   uniQueryIMGFOTO.LoadFromStream(MS1);
   }
   UniQueryIMG.ParamByName('FOTO').LoadFromStream(MS1);
   {
   Quizás también deberías rellenar los parámetros :MODULO
   }
   UniQueryIMG.ParamByName('MODULO').As??? := ???;

   UniQueryIMG.ExecSQL;
[...]
   UniQueryIMG.Close;
   UniQueryIMG.SQL.Clear;
   UniQueryIMG.SQL.Add('UPDATE IMG SET FOTO = :FOTO, OTRO1 = :OTRO1 where OTRO1  = ''I'' and MODULO = ''VISITAS''');
   UniQueryIMG.ParamByName('OTRO1').AsString := '';

   { Aquí estás rellenando campos y no los parámetros del query
     Mismos comentarios que para el caso anterior
   uniQueryIMGFOTO.LoadFromStream(MS1);
   }
   UniQueryIMG.ParamByName('FOTO').LoadFromStream(MS1);

   UniQueryIMG.ExecSQL;
Responder Con Cita
  #9  
Antiguo 11-01-2023
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.735
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Código Delphi [-]
   NewBitmap := image4.bitmap;//TBitmap.CreateFromFile('input.bmp');
[...]
   try
   Surf.Assign(NewBitmap);
[...]
   finally
      {
       No debes liberar NewBitmap, porque estarías liberando inage4.Bitmap
       Debes dejar que cuando se cierre el formulario se libere image4 que a su vez liberará Bitmap.
      }
      // NewBitmap.Free;  //Los estoy comentando ya que uno de los dos me esta dando problema cerrandome la aplicacion
   end;
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
Reducir tamaño de imagen en TImage capo979 Gráficos 1 12-01-2009 17:29:59
Reducir el tamaño de una imagen pablopessoa Varios 6 11-10-2008 13:18:40
Resolución de una imagen icsoft Gráficos 4 23-07-2008 11:08:17
Resolucion de una imagen en reportBuilder trashky Impresión 2 08-05-2006 10:00:03
Reducir tamaño de imagen de un dbimage Walterdf Gráficos 4 11-11-2004 14:20:33


La franja horaria es GMT +2. Ahora son las 08:59:29.


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