PDA

Ver la Versión Completa : Cargar imágenes desde archivo en ImageList


vankul
03-12-2013, 22:27:16
Tengo el siguiente código que funciona bien con archivos .bmp pero no con los .jpg, me gustaría que alguien me ayudara:

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

Casimiro Notevi
04-12-2013, 00:00:43
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)

ecfisa
04-12-2013, 06:17:33
Hola vankul.

De este modo me funciona correctamente:

#include <jpeg.hpp>

void __fastcall TForm1::FormCreate(TObject *Sender)
{
FileListBox1->Directory = "C:\\Prueba\\Imagenes";
FileListBox1->Mask = "*.BMP;*.JPG;*.JPEG";
ListView1->SmallImages = ImageList1;
ListView1->ViewStyle = vsSmallIcon;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
for (int i = 0; i < FileListBox1->Items->Count; i++) {
TJPEGImage *JPG = new TJPEGImage();
Graphics::TBitmap *BM = new Graphics::TBitmap;
TRect R;
AnsiString filename = FileListBox1->Directory + "\\" +
FileListBox1->Items->Strings[i];
AnsiString name = ExtractFileName(filename);
AnsiString ext = ExtractFileExt(filename).UpperCase();
R.Left = 0;
R.Top = 0;
R.Right = ImageList1->Width;
R.Bottom = ImageList1->Height;
BM->Width = ImageList1->Width;
BM->Height = ImageList1->Height;
try {
if (ext == ".JPG" || ext == ".JPEG") {
JPG->LoadFromFile(filename);
BM->Assign(JPG);
BM->Canvas->StretchDraw(R, BM);
ImageList1->Add(BM, NULL);
}
if (ext == ".BMP") {
BM->LoadFromFile(filename);
ImageList1->Add(BM, NULL);
}
ListView1->Items->Add();
ListView1->Items->Item[ListView1->Items->Count-1]->Caption = name;
ListView1->Items->Item[ListView1->Items->Count-1]->ImageIndex = i;
}
catch(...) {
MessageBox(Handle,
((AnsiString)("Error leyendo imágen: "+filename)).c_str(),
"ERROR",
MB_ICONERROR);
}
delete JPG;
delete BM;
}
}


Saludos :)

Edito: vankul, cambié el título original "Una ayudita" por uno mas significativo para facilitar las búsquedas.