Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problema con imagenes jpeg en paradox (otro tio mas)

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problema con imagenes jpeg en paradox (otro tio mas) Responder citando

Hola, siento abrir otro hilo preguntando sobre cómo cargar imágenes en una tabla, pero es que me he leido todos los hilos relacionados con este tema y aún no me aclaro.
Vereis dispongo de una base de datos local, paradox. Una de las tablas es sobre máquinas, y uno de los campos era una foto, según las recomendaciones, es mejor el tipo Blob... hecho xD.
Ahora tengo dos formularios, uno con el Ttable apuntando a esta tabla, su datasource y su grid "reducido" (muestra solo unos datos de la tabla entera). Y luego otro que sería el de Inserción/Edición de máquinas que tiene muchos dbedits para cada campo y un TImage (segui tambien este consejo) en el que intento guardar (cuando se inserta) y mostrar (cuando se edita) la foto.

Para insertar, el tema de la foto he puesto este código:

Código:
  TMemoryStream *msFoto = new TMemoryStream;

BitmapToStream(frmNuevaMaq->imgMaquina->Picture->Bitmap,msFoto);
    frmGestMaquinas->dbMaquinas->FieldByName("Maq_foto")->Value = msFoto;
    frmGestMaquinas->dbMaquinas->Post();
    ShowMessage("Máquina: \n\n\"" + edSerie->Text + " - " + edNMod->Text + "\n\n" + edMarca->Text + ": " + edModelo->Text + "\" \n\nse ha insertado correctamente");
    frmGestMaquinas->Show();
    frmNuevaMaq->Close();
    delete msFoto;


Donde BitmapToStream es la siguiente función:

Código:
//Función para convertir un Bitmap en Stream, y así poder guardarlo en la bd
void BitmapToStream(Graphics::TBitmap *bmpImagen,TMemoryStream *msImagen)
{
  TJPEGImage *jpgImagen = new TJPEGImage;

  //Inicializamos el jpeg para que sea lo más óptimo
  jpgImagen->Scale              = jsFullSize;
  jpgImagen->Performance        = jpBestQuality;
  jpgImagen->PixelFormat        = jf8Bit;
  jpgImagen->ProgressiveDisplay = false;
  jpgImagen->Smoothing          = false;
  jpgImagen->Grayscale          = false;


  jpgImagen->Assign(bmpImagen);
  jpgImagen->SaveToStream(msImagen);
  msImagen->Seek(0,soFromBeginning);

  delete jpgImagen;
}


Pues bien, parece que funciona... digo parece porque nome salen excepciones ni ningún mensaje de error xDDD, ya que si intento mostrarlo (si le doy a "Editar" pues se abre dicho formulario con los datos rellenados, y pretendo que se muestre tambien la imagen en el TImagen), utilizando este código:

Código:

    frmNuevaMaq->imgMaquina->Picture->Assign(BlobToJpg((TBlobField*)frmGestMaquinas->dbMaquinas->FieldByName("Maq_foto")));
frmNuevaMaq->Show();
frmGestMaquinas->Hide();


Y, en ejecución, cuadn ole doy al botón de Editar, me sale un error de excepción de #JPEG Error 52. Así que deduzco que esa forma de mostrar la imagen no es muy buena xD.

¿Alguna sugerencia para mostrar el contenido (si es que lo guarda... que esa es otra xD)?

Gracias por adelantado, saludos y lo siento por ser otro más preguntando lo mismo Sad (procuro esforzarme... pero me he quedado atrapado)
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

falta un detalle
frmNuevaMaq->imgMaquina->Picture->Bitmap->Assign(


Comentaba lo del BitMap, por que el si tiene los métodos, para usar LoadStream, saludos
_________________
Cool


Ultima edición por Cesar C. Salazar Gonzalez el Lun 04 Jun, 2007 11:15 am, editado 2 veces
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Jeje gracias César por responder, ya he añadido ese detalle, pero me sigue saliendo el error 52 del jpeg :S. Esto de las imagenes en bds... desespera un poco xD

saludos!

EDITO: Por si os sirve de algo "JPEG error #52 - File is not a JPEG file", eso puede indicar que la foto no se ha guardado bien no?, porque la foto es jpeg. Para guardarlo en la tabla era esta instrucción:

frmGestMaquinas->dbMaquinas->FieldByName("Maq_foto")->Value = msFoto;

Puse "->Value", ya que no sé como guardar el Blob y no existe el LoadFromStream ni nada parecido... ¿es correcto?

EDITO2 : Vale, despues de mucho esfuerzo lo he conseguido ^^, para guardar imagenes:
Código:

static_cast<TBlobField>(frmGestMaquinas->dbMaquinas->FieldByName("Maq_foto"))->LoadFromFile(dlgImagenMaq->FileName);

Para cargarlas:
Código:

    TJPEGImage *JPeg;
    TMemoryStream *Corriente;

    JPeg = new TJPEGImage;
    Corriente = new TMemoryStream;

    static_cast <TBlobField>(frmGestMaquinas->dbMaquinas->FieldByName("Maq_foto"))->SaveToStream(Corriente);
    Corriente->Seek(0,soFromBeginning);
    JPeg->LoadFromStream(Corriente);
    frmNuevaMaq->imgMaquina->Picture->Assign(JPeg);

    Corriente->Free();
    JPeg->Free();


Se me escapo este hilo sorry :S
Embarassed . Gracias por todo xicos Wink
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.