Ускорение увеличения растрового изображения во втором растровом изображении с помощью наложения - PullRequest
0 голосов
/ 26 декабря 2018

Следующий код растягивает растровое изображение, смешивает его с существующим фоном, поддерживает прозрачную область первичной графики и затем отображает наложение в окне (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);

Отображается правильно, но по мере увеличения графики скорость рисования быстро замедляется ...

...