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


Автор: Mewer 16.6.2008, 23:19
Какие есть способы подогнать картинку под размеры указанные а ImageList? Когда вручную добавляешь в ImageList там можно указать stretch, но вручную(программно) как это сделать? Надеюсь на вашу помощь.

Автор: Rrader 17.6.2008, 06:13
Это реализуется на уровне редактора - сначала идет StretchDraw на временном TBitmap. Потом происходит обычная замена. В твоем случае можно перед добавлением сделать все необходимое.

Автор: Mewer 17.6.2008, 07:32
Код

TJPEGImage *Jpeg1 = new TJPEGImage();
Graphics::TBitmap *Bmp1 = new Graphics::TBitmap();

Jpeg1->LoadFromFile(OpenDialog1->FileName);
Bmp1->Assign(Jpeg1);
Bmp1->Canvas->StretchDraw(Rect(0,0,200,200),Bmp1);



ImageList1->Add(Bmp2,NULL);


в итоге в ИмеджЛисте получаются несколько картинок, т.е StretchDraw у меня не работает как нужно, есть идеи почему?

Автор: Rrader 18.6.2008, 06:11
Код совсем неясный. Что такое Bmp2?

Можно сделать следующее: создать временный TBitmap. Нарисовать на нем твою картинку через StretchDraw. Добавить в ImageList.
Под рукой нет билдера, но вот идея:
Код

ImageBmp->Width = ImageList1->Width;
ImageBmp->Height = ImageList1->Height;
ImageBmp->Canvas->StretchDraw(Rect(0, 0, Bmp->Width, Bmp->Height), <TBitmap-оригинал>);
// Добавляем
ImageList1->Add(ImageBmp, ...);

Автор: Mewer 19.6.2008, 09:42
Спаибо, разобрался, вопрос новый возник, в цикле добавляются картинки в имеджлист, но на 15й картинке начинаются чудеса, 16я -чёрная, а начиная с 17й все повторяются, т.е 17я это 1я, 18я это 2я.

Код

 TJPEGImage *Jpeg1 = new TJPEGImage();
  Graphics::TBitmap *Bmp1 = new Graphics::TBitmap();
  Jpeg1->LoadFromFile(Q3->FieldByName("Path")->Value);
  Bmp1->Assign(Jpeg1);
  Bmp1->Canvas->StretchDraw(Rect(0,0,60,60),Bmp1);
  Bmp1->Height=60;
  Bmp1->Width=60;
  ImageList1->Add(Bmp1,NULL);
  ListView2->AddItem(Q3->FieldByName("Title")->Value,NULL);
  ListView2->Items->Item[i]->StateIndex=i;
  delete *Bmp1;
  delete *Jpeg1;
 


всё в цикле а затем выводится в листвью, может ему ресурсов не хватает или чего? smile 

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