Strona 1 z 1

TImage i bitmapy

Nowy postNapisane: sobota, 29 maja 2010, 21:39
przez duf
Mam kontener vector z kilkoma obiektami typu TBitmap. Czy można połączyć te bitmapy w jedną i przekopiować do TImage? Próbowałem zrobić to tak:
Kod: Zaznacz cały
for ( itbitmap = bitmapvector.begin(); itbitmap <bitmapvector.end(); ++itbitmap )
      newimage->Canvas->CopyRect(Rect(0, 0, 950, 1280), (*itbitmap)->Canvas, Rect(0, 0, (*itbitmap)->Width, (*itbitmap)->Height));

ale do TImage kopiuje się tylko ostatni element z vectora.

Re: TImage i bitmapy

Nowy postNapisane: niedziela, 30 maja 2010, 08:06
przez Cyfrowy Baron
Kopiuje się wszystko, ale funkcja CopyRect w Twoim kodzie, odrysowuje jedną grafikę na drugiej, więc nowa grafika wczytana do obszaru docelowego zasłania - wymazuje grafikę, która została tam wcześniej narysowana. Musisz sobie uzmysłowić, że ani klasa TCanvas, ani TBitmap i w zasadzie cała klasa TGraphics nie obsługują warstw, nie możesz więc umieścić jednej grafiki na drugiej, gdyż to jest tak jakbyś rysował na jednej kartce papieru i zawsze jak narysujesz na niej nowy obrazek to stary zniknie i nie możesz do niego powrócić nawet gdybyś użył gumki, gdyż gumka wymaże wszystko do białego papieru.
W tym konkretnym przypadku zamiast funkcji CopyRect lepiej jest użyć funkcji Draw.

Prosty przykład z umieszczaniem obok siebie trzech bitmap za pomocą funkcji Draw bez wektorów:
Kod: Zaznacz cały

 Graphics
::TBitmap *bitmapa = new Graphics::TBitmap;

 for(int i = 0; i < 3; i++)
 {
  String fileName = "c:\\image" + (String)(+ 1) + ".bmp";
  bitmapa->LoadFromFile(fileName);

  Image1->Canvas->Draw(* bitmapa->Width, 0, bitmapa);
 }

 delete bitmapa;
 


Ten sam efekt można uzyskać za pomocą funkcji CopyRect, trzeba jednak prawidłowo ustawić współrzędne płótna docelowego:

Kod: Zaznacz cały

 Graphics
::TBitmap *bitmapa = new Graphics::TBitmap;

 for(int i = 0; i < 3; i++)
 {
  String fileName = "c:\\image" + (String)(+ 1) + ".bmp";
  bitmapa->LoadFromFile(fileName);

  Image1->Canvas->CopyRect(
  Rect(* bitmapa->Width, 0, (* bitmapa->Width) + bitmapa->Width, bitmapa->Height),
  bitmapa->Canvas,
  Rect(0, 0, bitmapa->Width, bitmapa->Height)
                          );
 }

 delete bitmapa;
 

Re: TImage i bitmapy

Nowy postNapisane: poniedziałek, 31 maja 2010, 12:08
przez duf
Dziękuję. Wstyd się przyznać ale takie łopatologiczne tłumaczenie najszybciej do mnie trafia ;-)