Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 1 Día
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.425
Poder: 21
Angel.Matilla Va por buen camino
Error al asignar un TQRImage

Buenas tardes. Estoy usando BCB6 y QR 3.0.9. Tengo este query:
Código SQL [-]
SELECT TRIM(A.Titulo)||' ('||CAST(A.Anyo AS VARCHAR(5))||')' Titulo, A.Interpretes, A.Autor, A.Duracion, A.Idiomas, A.Subtitulos, B.Caratula
   FROM Titulos A 
   LEFT JOIN Imagen B ON A.Tipo = B.Tipo AND A.Registro = B.Registro AND B.Posicion = 'P' WHERE A.Tipo = 1 AND A.Disco = :Disco
   ORDER BY Orden
que devuelve, por ejemplo, esto:

y tengo este código para meter el resultado del query en el QR:
Cita:
TMemoryStream *msImagen = new TMemoryStream;
static_cast<TGraphicField *>(Query->FieldByName("Caratula"))->SaveToStream(msImagen);
if (msImagen->Size > 0)
{
tbmp->Assign(Query->FieldByName("Caratula"));
ImgInf->Picture->Assign(tbmp);
}
Como veis el query devuelve una imagen. Sin embargo, al leer el query, no sé si lo que viene es un BMP o un JPG, y no sé en cual de los dos casos me da este error:

¿Cómo puedo esquivarlo?
Responder Con Cita
  #2  
Antiguo Hace 1 Día
emailx45 emailx45 is offline
Miembro
 
Registrado: abr 2025
Posts: 22
Poder: 0
emailx45 Va por buen camino
Thumbs up

Prueba esto:

Código Delphi [-]
// Vcl.Imaging.jpeg / Vcl.Imaging.pngimage

TMemoryStream *msImagen = new TMemoryStream();
try
{
    TBlobField *blobField = dynamic_cast(Query->FieldByName("Caratula"));
    if (blobField && !blobField->IsNull)
    {
        blobField->SaveToStream(msImagen);
        msImagen->Position = 0;
        
        if (msImagen->Size > 0)
        {
            //La imagen se identifica automáticamente como Bitmap, JPEG o PNG.
            ImgInf->Picture->LoadFromStream(msImagen);
        }
    }
}
__finally
{
    delete msImagen;
}

Última edición por emailx45 fecha: Hace 1 Día a las 22:49:34. Razón: error
Responder Con Cita
  #3  
Antiguo Hace 21 Horas
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.425
Poder: 21
Angel.Matilla Va por buen camino
Cita:
Empezado por emailx45 Ver Mensaje
Prueba esto:

Código Delphi [-]
// Vcl.Imaging.jpeg / Vcl.Imaging.pngimage

TMemoryStream *msImagen = new TMemoryStream();
try
{
    TBlobField *blobField = dynamic_cast(Query->FieldByName("Caratula"));
    if (blobField && !blobField->IsNull)
    {
        blobField->SaveToStream(msImagen);
        msImagen->Position = 0;
        
        if (msImagen->Size > 0)
        {
            //La imagen se identifica automáticamente como Bitmap, JPEG o PNG.
            ImgInf->Picture->LoadFromStream(msImagen);
        }
    }
}
__finally
{
    delete msImagen;
}
Es curioso: como VCL TPicture no tiene el método LOadFromStream. Seguiremos probando otras formas.
Responder Con Cita
  #4  
Antiguo Hace 14 Horas
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.425
Poder: 21
Angel.Matilla Va por buen camino
Cita:
Empezado por emailx45 Ver Mensaje
Prueba esto:
Lo he podido resolver de una forma más simple:
Código:
TMemoryStream *msImagen = new TMemoryStream;
static_cast<TGraphicField *>(Query->FieldByName("Caratula"))->SaveToStream(msImagen);
if (msImagen->Size > 0)
{
     ImgInf          = new TQRImage(fCaratula->QRBand1);
     ImgInf->Parent  = fCaratula->QRBand1;
     ImgInf->Left    = 10;
     ImgInf->Top     = nTop;
     ImgInf->Height  = ShpInf->Height;
     ImgInf->Width   = 0.688 * ShpInf->Height;
     ImgInf->Stretch = true;

     try
     {
          tbmp->Assign(Query->FieldByName("Caratula"));
     }
     catch (...)
     {
          tbmp->Assign(::BLOBtoJPG((TBlobField *)Query->FieldByName("Caratula")));
     }
     ImgInf->Picture->Assign(tbmp);
}
Responder Con Cita
  #5  
Antiguo Hace 14 Horas
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 161
Poder: 20
aposi Va por buen camino
segun claude prueba esto:


Código:
#include <jpeg.hpp>

void __fastcall TForm1::DetailBand1BeforePrint(TQRCustomBand *Sender, bool &PrintBand)
{
    ImgInf->Picture->Assign(NULL);   // evita que se arrastre la imagen del registro anterior

    TBlobField *campo = dynamic_cast<TBlobField*>(Query->FieldByName("Caratula"));
    if (campo == NULL || campo->IsNull)
        return;

    TMemoryStream *ms = new TMemoryStream;
    try
    {
        campo->SaveToStream(ms);
        if (ms->Size < 4)
            return;

        unsigned char cab[4];
        ms->Position = 0;
        ms->ReadBuffer(cab, 4);
        ms->Position = 0;

        if (cab[0] == 0xFF && cab[1] == 0xD8)          // JPEG
        {
            TJPEGImage *jpg = new TJPEGImage;
            try
            {
                jpg->LoadFromStream(ms);
                Graphics::TBitmap *bmp = new Graphics::TBitmap;
                try
                {
                    bmp->Assign(jpg);                  // convertimos a BMP: QR lo imprime sin problemas
                    ImgInf->Picture->Assign(bmp);
                }
                __finally { delete bmp; }
            }
            __finally { delete jpg; }
        }
        else if (cab[0] == 'B' && cab[1] == 'M')       // BMP
        {
            ImgInf->Picture->Bitmap->LoadFromStream(ms);
        }
        // Otros formatos (PNG, GIF...) no los soporta BCB6 de serie: se deja la imagen vacía
    }
    __finally
    {
        delete ms;   // en tu código original el stream no se liberaba nunca
    }
}
Responder Con Cita
  #6  
Antiguo Hace 13 Horas
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.425
Poder: 21
Angel.Matilla Va por buen camino
Muchas gracias.
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
Ocultar TQRimage al imprimir reporte (QuickReport) Theluar Impresión 6 09-05-2013 00:32:32
Mostrar imagen en el TQRImage de un Qreport ingabraham Varios 0 06-11-2012 16:10:21
Mantener aspecto de un TQRImage cincosoft Impresión 3 10-09-2011 10:56:51
Graficos TQRImage y final de página Cabanyaler Impresión 1 12-02-2010 11:50:07
problemas con el TQRImage? judoboy Impresión 1 19-05-2003 14:59:11


La franja horaria es GMT +2. Ahora son las 08:42:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi