Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Cargar imágenes desde archivo en ImageList (https://www.clubdelphi.com/foros/showthread.php?t=84775)

vankul 03-12-2013 22:27:16

Cargar imágenes desde archivo en ImageList
 
Tengo el siguiente código que funciona bien con archivos .bmp pero no con los .jpg, me gustaría que alguien me ayudara:
Código:

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?, gracias por tu colaboración :)

ecfisa 04-12-2013 06:17:33

Hola vankul.

De este modo me funciona correctamente:
Código:

#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.


La franja horaria es GMT +2. Ahora son las 12:04:18.

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