SoloCodigo

Programación General => C/C++ => C++ Builder => Mensaje iniciado por: vankul en Martes 3 de Diciembre de 2013, 20:35

Título: Una ayudita
Publicado por: vankul en Martes 3 de Diciembre de 2013, 20:35
Tengo el siguiente código que me funciona OK con imágenes en .bmp pero no con las .jpg y quisiera una solución; muchas gracias.
Código: [Seleccionar]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String dir = "C:";
if (SelectDirectory("Elige carpeta:","",dir)) {
FileListBox1->Directory = dir;
FileListBox1->ItemIndex = 0;
for (int i = 0; i < FileListBox1->Count; i++) {
lis->Add(FileListBox1->FileName);
FileListBox1->ItemIndex++;
}
if (lis->Count>0) {
Graphics::TBitmap* resBmp;
TJPEGImage *ImagenJpg = new TJPEGImage();
TListItem *Item;
String extension;
for (int i = 0; i < lis->Count; i++) {
extension = ExtractFileExt(lis->Strings[i]);
if ((extension.UpperCase()==".JPG")||(extension.UpperCase()==".JPEG")){
ImagenJpg->LoadFromFile(lis->Strings[i]);
resBmp->Height = ImageList1->Height;
resBmp->Width = ImageList1->Width;
ImageList1->Masked = false;
ImagenJpg->DIBNeeded();
resBmp->Assign(ImagenJpg);
ImageList1->Add(resBmp,NULL);
Item = ListView1->Items->Add();
Item->Caption = ExtractFileName(lis->Strings[i]);
Item->ImageIndex = i;

}
else {
if (extension.UpperCase()==".BMP") {
resBmp = new Graphics::TBitmap();
resBmp->Height = ImageList1->Height;
resBmp->Width = ImageList1->Width;
ImageList1->Masked = false;
resBmp->LoadFromFile(lis->Strings[i]);
ImageList1->Add(resBmp,NULL);
Item = ListView1->Items->Add();
Item->Caption = ExtractFileName(lis->Strings[i]);
Item->ImageIndex = i;
}
}
}
}
else {
ShowMessage("No hay archivos válidos en el directorio.");
}
}
}
Título: Re:Una ayudita
Publicado por: ProfesorX en Miércoles 4 de Diciembre de 2013, 02:33
Cometes el clasico error de muchos que comienzan a trabajar con imagenes.

El que un archivo sea de imagen, no quiere decir que podras cargarlo automaticamente, cada diferente archivo de imagenes (jpg, png tiff, gif, etc) tienen su propio formato, el unico que se puede leer sin ninguna libreria adicional es el BMP (mapa de bits) para poder leer el resto de formatos necesitas una libreria de manejo de imagenes.

Prueba a utilizar FreeImage http://freeimage.sourceforge.net/ (http://freeimage.sourceforge.net/) o DevIL http://openil.sourceforge.net/ (http://openil.sourceforge.net/)

Saludos :)
Título: Re:Una ayudita
Publicado por: vankul en Sábado 7 de Diciembre de 2013, 21:36
Muchas gracias ProfesorX, provaré lo que me sugieres  :suerte: