Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   Reducir resolucion de imagen (https://www.clubdelphi.com/foros/showthread.php?t=96032)

duilioisola 11-01-2023 08:38:29

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;

giantonti1801 11-01-2023 09:07:45

Cita:

Empezado por duilioisola (Mensaje 549925)
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;

De ante mano gracias, Esto estuve tratando de hacer desde el principio pero no me deja ya que a enviarle el parámetro al campo me daba error
Adjunto imagen. Como poedo hacerlo?

duilioisola 11-01-2023 09:48:05

Claramente te está indicando que no tiene suficientes parámetros.
  • Pon el cursor sobre la palabra LoadFromStream y presiona F1 sobre.
    Te dará ayuda sobre esa instrucción si Delphi la tiene incorporada.
  • También puedes agregar una coma y esperar un momento. Delphi mostrará un ToolTip con la definición de la función que te indicará qué tipo de dato espera.
  • Si están los fuentes disponibles puedes clickar sobre la función mientras mantienes presionado la tecla CTRL y te llevará a la implementación de la función.
  • Además de eso puedes buscar información sobre el componente específico en internet.

No te des por vencido tan rápido. Lee el mensaje de error. Lee el código fuente. Se curioso. Investiga.

giantonti1801 11-01-2023 11:07:01

Cita:

Empezado por duilioisola (Mensaje 549929)
Claramente te está indicando que no tiene suficientes parámetros.
  • Pon el cursor sobre la palabra LoadFromStream y presiona F1 sobre.
    Te dará ayuda sobre esa instrucción si Delphi la tiene incorporada.
  • También puedes agregar una coma y esperar un momento. Delphi mostrará un ToolTip con la definición de la función que te indicará qué tipo de dato espera.
  • Si están los fuentes disponibles puedes clickar sobre la función mientras mantienes presionado la tecla CTRL y te llevará a la implementación de la función.
  • Además de eso puedes buscar información sobre el componente específico en internet.

No te des por vencido tan rápido. Lee el mensaje de error. Lee el código fuente. Se curioso. Investiga.

Gracias amigo. finalmente y con tu gran ayuda se logró guardar la foto en una resolución baja aligerando así todos los procesos de consulta.
Código Delphi [-]
begin
                  UniQueryIMG.Close;
                  UniQueryIMG.SQL.Clear;
                  UniQueryIMG.SQL.Text := 'Select *  from IMG where otro1 = ''I'' and MODULO = ''VISITAS''';
                  UniQueryIMG.Open;
                  if not UniQueryIMG.Eof  then

                     begin
                     UniQueryIMG.Edit;
                     UniQueryIMGFOTO.LoadFromStream(MS1);
                     UniQueryIMGOTRO1.AsString := 'LH';
                     UniQueryIMG.Post;
                     end
                     else

                     end;
                  end;


La franja horaria es GMT +2. Ahora son las 13:09:01.

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