Следующий код растягивает растровое изображение, смешивает его с существующим фоном, поддерживает прозрачную область первичной графики и затем отображает наложение в окне (imgScreen).Это прекрасно работает, когда уровень растяжения невелик или когда он фактически сокращает исходное растровое изображение.Однако при растяжении графики это очень медленно.
У меня ограниченный опыт работы с C ++ и такого рода графикой, так что, возможно, есть еще один более эффективный способ сделать это.Размер первичного растрового изображения всегда квадратный.Любые идеи высоко ценятся ..!
Я собирался попытаться не отображать область отсечения, но из тестов кажется, что первоначальное растяжение вызывает замедление ... Также возникают проблемы с просмотром, как вычислить необрезанную область ... Рисование элементов управления кажется пустой тратой, нокажется единственным способом использования встроенных функций, таких как растяжка и опция альфа-рисования.
std::auto_ptr<Graphics::TBitmap> bmap(new Graphics::TBitmap);
std::auto_ptr<Graphics::TBitmap> bmap1(new Graphics::TBitmap);
int s = newsize;
TRect sR = Rect(X,Y,X+s,Y+s);
TRect tR = Rect(0,0,s,s);
bmap->SetSize(s,s);
bmap->Canvas->StretchDraw(Rect(0, 0, s, s), Form1->Image4->Picture-
>Bitmap); // scale
bmap1->SetSize(s,s);
bmap1->Canvas->CopyRect(tR, Form1->imgScreen->Canvas, sR); //background
bmap1->Canvas->Draw(0,0,bmap.get()); // combine
Form1->imgTemp->Picture->Assign(bmap1.get());
Form1->imgScreen->Canvas->Draw(X,Y, Form1->imgTemp->Picture->Bitmap,
alpha);
Отображается правильно, но по мере увеличения графики скорость рисования быстро замедляется ...