Следующий код растягивает растровое изображение, смешивает его с существующим фоном, поддерживает прозрачную область первичной графики и затем отображает смесь в окне (imgScreen). Это прекрасно работает, когда уровень растяжения невелик или когда он фактически сокращает исходное растровое изображение. Однако при растяжении графики это очень медленно.
У меня ограниченный опыт работы с C ++ и с такой графикой, так что, возможно, есть еще один более эффективный способ сделать это. Размер первичного растрового изображения всегда квадратный. Любые идеи высоко ценятся ..!
Я собирался попытаться не отображать область отсечения, но из тестов кажется, что первоначальное растяжение вызывает замедление … Также возникают проблемы с просмотром, как вычислить необрезанную область … Рисование в элементах управления кажется бесполезным, но кажется единственным способом использовать встроенный в таких функциях, как stretchdraw и опция альфа-рисования.
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);
Отображается правильно, но по мере увеличения графика скорость прорисовки замедляется …
Задача ещё не решена.
Других решений пока нет …