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.",'!');
}