Ver Mensaje Individual
  #1  
Antiguo 19-03-2015
jesusgandia1966 jesusgandia1966 is offline
Miembro
 
Registrado: mar 2015
Posts: 27
Reputación: 0
jesusgandia1966 Va por buen camino
Obtener info de un fichero JPG

Como puedo obtener información de un fichero de imagen JPG.

El problema es que a veces un usuario intenta cargarme una imagen JPG de 32 bits de profundidad de colores y el TImage de Builder no lo acepta con el consecuente error y salida del programa.

También he intentado proteger el código que abre el cuadro de dialogo de las imágenes para controlar el error y responder con un mensaje al usuario, pero da la casualidad que se comete el error y el programa sigue sin ir al Catch(...) del try{}.

He buscado por todo el foro y en Google, pero sigo sin saber como obtengo esa información.

De ya muchas gracias.

Aunque el mi código está en C++, si alguien me puede ayudar en Delphi, yo ya pasaría la función a C++.

Código:

Código PHP:
    String Fichero fV->SV->DatSetPCRutaTPV_Ncr "Imagenes\\Logo.jpg"
    if(!
ForceCurrentDirectory
    { 
        
ForceCurrentDirectory true
        
SetCurrentDir(fV->SV->DatSetPCRutaTPV_Ncr "Galeria\\Logos"); 
        
OPDLogo->InitialDir GetCurrentDir(); 
    } 
    else 
        { 
            
SetCurrentDir(ExtractFilePath(OPDLogo->FileName)); 
            
OPDLogo->InitialDir GetCurrentDir(); 
        } 

    try 
    { 
        if(
OPDLogo->Execute()) 
        { 
            if(
ComparaExtension(OPDLogo->FileName,".jpg")) 
            { 
                
ImagenLogo->Picture->LoadFromFile(OPDLogo->FileName);//Protegiendo esta linea conta posibles fallos de IMAGEN 
                
if(ImagenLogo->Picture->Width <300>Picture->Height <150>IBSQLExec->ParamByName("P_NOMIMAGEN")->AsString "Logo"
                    
MDatos->IBSQLExec->ParamByName("P_FOTO")->LoadFromFile(OPDLogo->FileName); 
                    
MDatos->IBSQLExec->ExecQuery(); 
                    
MDatos->IBSQLExec->Close(); 
                    
MDatos->IBTransaction->CommitRetaining(); 

                    
ImagenLogo->Picture->LoadFromFile(OPDLogo->FileName); 
                    
ImagenLogoTicket->Picture->LoadFromFile(OPDLogo->FileName); 
                    
ImagenLogo->Picture->SaveToFile(Fichero.w_str()); 
                } 
                else 
                    { 
                        
fV->MenDialogo
                        
"La imagen es demasiado grande\n" 
                        "Máximo alto permitido = 150 Pixels\n" 
                        "Maximo ancho permitido = 300 Pixels"
,'!'); 

                        if(
FileExists(Fichero.w_str())) 
                        { 
                            
ImagenLogo->Picture->LoadFromFile(Fichero.w_str()); 
                            
ImagenLogoTicket->Picture->LoadFromFile(Fichero.w_str()); 
                        } 
                        else 
                            { 
                                
ImagenLogo->Picture NULL
                                
ImagenLogoTicket->Picture NULL
                            } 
                    } 
            } 
            else 
                
fV->MenDialogo
                
"Solo puede seleccionar archivos de imagen (*.JPG).\n" 
                "El archivo para el logo, no se cargará."
); 
        } 
        else 
            
fV->MenDialogo
            
"Se ha cancelado la imagen.\n" 
            "El logo no se cambiará."
); 
    } 
    catch(...) 
        { 
            
fV->MenDialogo
            
"La imagen que ha seleccionado, tiene una profundidad de color de más de 24 bits, o no es una fichero de imagen correcto.\n\n" 
            "Se cancela la operacion de cargar LogoTipo."
,'!'); 
        } 

Última edición por ecfisa fecha: 19-03-2015 a las 20:04:43. Razón: etiquetas
Responder Con Cita