Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-01-2023
giantonti1801 giantonti1801 is offline
Miembro
 
Registrado: oct 2022
Posts: 143
Poder: 2
giantonti1801 Va por buen camino
Stream Write Error

hola amigo en esta ocasión estoy desarrollando una aplicación con delphi 11 en multiplataforma y quiero reducir las imagen. esta misma funcion la estoy utilizando en una aplicacion para android y me finciona perfecto pero ahora la estoy implementando en windows 64BIt y me da error de 'Stream Write Error'

Código Delphi [-]
procedure TFormLogin.SpeedButtonGuardarClick(Sender: TObject);
var
Image: TBitmap;
bmp: TBitmap;
NewBitmap: TBitmap;
MS1 : TMemoryStream;
Surf: TBitmapSurface;
JpgQuality : TBitmapCodecSaveParams;
begin
   NewBitmap := ImageFotoReg.bitmap;
   MS1 := TMemoryStream.Create;
   Surf := TBitmapSurface.create;
   try
   MS1.Position := 0;
   Surf.Assign(NewBitmap);
   JpgQuality.Quality := 30;
     if not TBitmapCodecManager.SaveToStream(MS1, Surf, '.jpg', @JpgQuality) then
     raise EBitmapSavingFailed.Create('Error saving Bitmap to jpg');
      begin

        if editNombre.text = '' then
        //   begin
           ShowMessage('El nombre no puede estar vacio');
        if editApellido.text = '' then
           ShowMessage('El Apellidos no puede estar vacio');
        if editRUT.text = '' then
           ShowMessage('El RUT no puede estar vacio') ;
        if editCodigo.text = '' then
           ShowMessage('El Codigo de Medigo no puede estar vacio');
        if editTelefono.text = '' then
           ShowMessage('El Telefono no puede estar vacio');
        if editciudad.text = '' then
           ShowMessage('El Ciudad no puede estar vacio');
        if EditrRegion.text = '' then
           ShowMessage('El Region no puede estar vacio') ;
        if editDireccion.text = '' then
           ShowMessage('La Direccion no puede estar vacia');
        if editlogin.text = '' then
           ShowMessage('El Login no puede estar vacio')
        //if editPassword.text = '' then
        //   ShowMessage('El Password no puede estar vacio')

       else
        begin

          UniQuery1.Close;
          UniQuery1.SQL.Clear;
          UniQuery1.SQL.Add('INSERT INTO Login (NOM,APE,RUT,CODMED,TEL,DIR,CIUDAD,ESTADO,FOTO, FECHAREG,LOGIN, PAS, INST)');           //
          UniQuery1.SQL.Add('VALUES (:NOM :APE :RUT :CODMED :TEL IR :CIUDAD :ESTADO :FOTO :FECHAREG :LOGIN :PAS :INST)');                      //,
          UniQuery1.ParamByName('NOM').AsString := EDITNombre.text;
          UniQuery1.ParamByName('APE').AsString := EditApellido.Text;
          UniQuery1.ParamByName('RUT').Asstring := EditRUT.text;
          UniQuery1.ParamByName('CODMED').AsString := EditCodigo.text;
          UniQuery1.ParamByName('TEL').AsString := EditTelefono.TEXT;
          UniQuery1.ParamByName('CIUDAD').Asstring := EditCiudad.TEXT;
          UniQuery1.ParamByName('ESTADO').Asstring := EditRREGION.TEXT;
          UniQuery1.ParamByName('DIR').Asstring := EditDireccion.TEXT;
          UniQuery1.ParamByName('INST').Asstring := ComboBoxInst.Items.Text;
          UniQuery1.ParamByName('LOGIN').Asstring := EditLOGIN.TEXT;
          UniQuery1.ParamByName('PAS').Asstring := EditPASSWORD.TEXT;
          UniQuery1FOTO.LoadFromStream(MS1);
          UniQuery1.ExecSQL;
          end;
        end;
       //end;
   finally
    //NewBitmap.Free;
    MS1.Free;
    Surf.Free;
   end;
end;

mucho agradecería su ayuda.
Responder Con Cita
  #2  
Antiguo 23-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.285
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
Cita:
Empezado por giantonti1801 Ver Mensaje
...pero ahora la estoy implementando en windows 64BIt y me da error de 'Stream Write Error'
El código siguiente funciona correctamente y guarda la imagen correctamente es disco y la muestra en otro control de imagen.
Está basado en el tuyo.

Lo he probado correctamente en Delphi 11.2.
deberías explicar en qué versión estás trabajando. Y en todo caso debuggar en Windows para ver la línea donde te falla.

Código Delphi [-]
uses
  FMX.Surfaces;

procedure TForm3.Button1Click(Sender: TObject);
var
  NewBitmap: TBitmap;
  MS1: TMemoryStream;
  Surf: TBitmapSurface;
  JpgQuality: TBitmapCodecSaveParams;
begin
  //
  NewBitmap := ImageFotoReg.bitmap;
  MS1 := TMemoryStream.Create;
  Surf := TBitmapSurface.Create;
  try
    MS1.Position := 0;
    Surf.Assign(NewBitmap);
    JpgQuality.Quality := 30;

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

    // Grabarla en disco (JPG)
    MS1.SaveToFile('r:\out.jpg');

    // Cargarla en otro componente
    ImageFotoReg2.Bitmap.LoadFromFile('r:\OUT.jpg');

  finally
    MS1.Free;
    Surf.Free;
  end;
end;

procedure TForm3.FormShow(Sender: TObject);
begin
  // cargar la imagen de disco (BMP)
  ImageFotoReg.Bitmap.LoadFromFile('r:\IN.bmp');
end;

__________________
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
  #3  
Antiguo 23-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
El código siguiente funciona correctamente y guarda la imagen correctamente es disco y la muestra en otro control de imagen.
Está basado en el tuyo.

Lo he probado correctamente en Delphi 11.2.
deberías explicar en qué versión estás trabajando. Y en todo caso debuggar en Windows para ver la línea donde te falla.

Código Delphi [-]
uses
  FMX.Surfaces;

procedure TForm3.Button1Click(Sender: TObject);
var
  NewBitmap: TBitmap;
  MS1: TMemoryStream;
  Surf: TBitmapSurface;
  JpgQuality: TBitmapCodecSaveParams;
begin
  //
  NewBitmap := ImageFotoReg.bitmap;
  MS1 := TMemoryStream.Create;
  Surf := TBitmapSurface.Create;
  try
    MS1.Position := 0;
    Surf.Assign(NewBitmap);
    JpgQuality.Quality := 30;

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

    // Grabarla en disco (JPG)
    MS1.SaveToFile('r:\out.jpg');

    // Cargarla en otro componente
    ImageFotoReg2.Bitmap.LoadFromFile('r:\OUT.jpg');

  finally
    MS1.Free;
    Surf.Free;
  end;
end;

procedure TForm3.FormShow(Sender: TObject);
begin
  // cargar la imagen de disco (BMP)
  ImageFotoReg.Bitmap.LoadFromFile('r:\IN.bmp');
end;

estoy desarrollando con multidevise y complicado en windows 64bit tengo Embarcadero® RAD Studio 11 Versión 28.0.45591.0253 la cuestión que este mismo código me sirvió en una aplicación que estaba haciendo con android y fue adaptado en este moemnto para recuperar la imagen directamente del streams, también tengo otro problema si agrego el JPEG (ME DA ERROR) en los uses por lo que estoy utilizando el
Código Delphi [-]
Vcl.Imaging.jpeg, FMX.Surfaces;
la otra cuestión es que no quisiera guardar la imagen en el PC del Cliente además que aunque lo haga no voy a poder guardarla o cargarla
Código Delphi [-]
ImageFotoReg2.Bitmap.LoadFromFile('r:\OUT.jpg');
ya que me pide el JPEG en lo uses. entonces caigo en el mismo circulo. la idea es que pueda guardar la imagen el JPG en la base de dato
Responder Con Cita
  #4  
Antiguo 24-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.285
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
Te adjunto el proyecto de ejemplo que he utilizado.
Pruebalo, cambiando los path de disco a ver si te funciona.

A partir de ahí puedes ir añadiendo cosas. Es un proyecto "multidevice" y lo he probado con win32 y Win64.
Archivos Adjuntos
Tipo de Archivo: zip Convert FMX BML to JPG.zip (7,2 KB, 4 visitas)
__________________
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
  #5  
Antiguo 21-02-2023
esublim esublim is offline
Miembro
 
Registrado: dic 2022
Posts: 40
Poder: 0
esublim Va por buen camino
quioero hacer eso pero al momento de guardar que reduzca el tamaño a mitad se podra. es decir si la imagen esta 1000x1000px se redusca a 500x500 px
Responder Con Cita
  #6  
Antiguo 22-02-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.285
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
Basta con decírselo a la variable que almacena el bitmap.
Añade la línea en rojo al código anterior.

Código Delphi [-]
procedure TForm3.Button1Click(Sender: TObject);
var
  NewBitmap: TBitmap;
  MS1: TMemoryStream;
  Surf: TBitmapSurface;
  JpgQuality: TBitmapCodecSaveParams;
begin
  NewBitmap := ImageFotoReg.bitmap;
  MS1 := TMemoryStream.Create;
  Surf := TBitmapSurface.Create;
  try
    MS1.Position := 0;

    // Reducir la imagen original a la mitad
    NewBitmap.Resize(NewBitmap.Width DIV 2, NewBitmap.Height DIV 2);

    Surf.Assign(NewBitmap);
    JpgQuality.Quality := 30;

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

    // Grabarla en disco (JPG)
    MS1.SaveToFile('r:\out.jpg');

    // Cargarla en otro componente
    ImageFotoReg2.Bitmap.LoadFromFile('r:\OUT.jpg');

  finally
    MS1.Free;
    Surf.Free;
  end;
end;
__________________
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
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
Stream read error en Android Yulexis Desarrollo en Delphi para Android 10 19-07-2018 22:42:45
Problemas con el error: access violation at 0x77d9dede: write of address 0x00090fec TecnoBestia Varios 8 30-09-2012 17:30:37
Error al usar el método Write mcs Varios 1 03-05-2010 10:27:10
Stream read error felipep Varios 0 23-09-2007 02:31:07
Error no permission for read-write access to database... JuanErasmo Conexión con bases de datos 0 06-12-2006 21:18:59


La franja horaria es GMT +2. Ahora son las 08:26:17.


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