 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
ercea Ens

Registrado: 07 May 2007Mensajes: 48
|
Publicado: Mie 16 May, 2007 11:33 pm Asunto: Problema con imagenes jpeg en paradox (otro tio mas) |
|
|
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 (procuro esforzarme... pero me he quedado atrapado) |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 17 May, 2007 12:17 am Asunto: |
|
|
falta un detalle
frmNuevaMaq->imgMaquina->Picture->Bitmap->Assign(
Comentaba lo del BitMap, por que el si tiene los métodos, para usar LoadStream, saludos _________________

Ultima edición por Cesar C. Salazar Gonzalez el Lun 04 Jun, 2007 11:15 am, editado 2 veces |
|
| Volver arriba |
|
 |
ercea Ens

Registrado: 07 May 2007Mensajes: 48
|
Publicado: Jue 17 May, 2007 3:47 pm Asunto: |
|
|
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
. Gracias por todo xicos  |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|