Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > добавление картинок в ImageList


Автор: Platov 13.5.2010, 22:22
Есть набор картинок gif, jpg, png. 
Картинки могут быть разных размеров, но отличаются не намного. 
Как их программно загонять в ImageList?

Вручную при создании проекта всё получается, значит ImageList их понимает.

 smile 

Автор: Dem_max 14.5.2010, 05:44
Что значит вручную ?
Вообще ImageList кроме формата ICO и BMP ничего не понимает больше.
Как ты это умудрился ему подсунуть PNG, GIF, JPG

едиственный вариант скормить такие форматы это преобразовать их к BMP.
допустим чтото типа этого
Код

#include <jpeg.hpp>

Graphics::TBitmap *bmp=new Graphics::TBitmap;
TJPEGImage *jp = new TJPEGImage();
jp->LoadFromFile("C:\\1.jpg");
bmp->Width= jp->Width;
bmp->Height=jp->Height;
bmp->Assign(jp);
ImageList1->Add(bmp, NULL);
 

Автор: Platov 14.5.2010, 08:23
Цитата(Dem_max @  14.5.2010,  05:44 Найти цитируемый пост)
Как ты это умудрился ему подсунуть PNG, GIF, JPG
  smile 

Очень просто! при добавлении через ImageList Editor добавляется всё (gif, bmp, jpg, png). 
Как-то ведь оно работает!
А вот во время работы программы  smile 

Автор: Platov 14.5.2010, 10:04
Dem_max, спасибо что развеял моё заблуждение что ImageList  умный.

сделал во так:


Код

#include <jpeg.hpp>
#include "GIFimg.hpp"
#include "pngimage.hpp"


//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{

if (OpenDialog1->Execute())
{
TListItem *li;

Graphics::TBitmap *bmp=new Graphics::TBitmap;
TJPEGImage *jp = new TJPEGImage();
TGIFImage *Gif=new TGIFImage;
TPngImage *Png=new TPngImage;

TRect dest=Rect(0,0,190,142);

if (ExtractFileExt(OpenDialog1->FileName).LowerCase()==".jpg")
  {
   jp->LoadFromFile(OpenDialog1->FileName);
   jp->Scale=true;
   bmp->Assign(jp);
  }
else
if (ExtractFileExt(OpenDialog1->FileName).LowerCase()==".png")
  {
   Png->LoadFromFile(OpenDialog1->FileName);
   Png->Canvas->StretchDraw(dest,Png);
   Png->Resize(190,142);
   bmp->Assign(Png);
  }
else
if (ExtractFileExt(OpenDialog1->FileName).LowerCase()==".gif")
  {
   Gif->LoadFromFile(OpenDialog1->FileName);
   Gif->Bitmap->Canvas->StretchDraw(dest,Gif);
   bmp->Assign(Gif);
  }
else
if (ExtractFileExt(OpenDialog1->FileName).LowerCase()==".bmp")
  {
   bmp->LoadFromFile(OpenDialog1->FileName);
   bmp->Canvas->StretchDraw(dest,bmp);
   bmp->Width=dest.Width();
   bmp->Height=dest.Height();
  }





ImageList1->Add(bmp, NULL);


li=ListView1->Items->Add();
li->Caption=OpenDialog1->FileName;
li->ImageIndex=ListView1->Items->Count-1;


delete Png;
delete bmp;
delete jp;
delete Gif;


}



}
//---------------------------------------------------------------------------




Почти всё отлично работает. Кроме кусочка с gif.
Он работает через раз, т.е. загружается картинка всегда только вот в первый раз масштабирование отрабатывает, во второй раз нет, потом опять масштабируется, потом нет и т.д.

Может кто знает из-за чего это.

Автор: Platov 14.5.2010, 10:43
 smile 

Код

if (ExtractFileExt(OpenDialog1->FileName).LowerCase()==".gif")
  {
   Gif->LoadFromFile(OpenDialog1->FileName);
   Gif->Bitmap->Canvas->StretchDraw(dest,Gif);
   Gif->Bitmap->Width=190;
   Gif->Bitmap->Height=142;

   bmp->Assign(Gif);
  }


Вот так работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)