0

以下代码拉伸位图,将其与现有背景混合,保持主图形的透明区域,然后在窗口 (imgScreen) 中显示混合。当拉伸级别不大或实际缩小初始位图时,这可以正常工作。但是,当拉伸图形时,它非常慢。

我对 C++ 和这种图形的经验有限,所以也许还有另一种更有效的方法来做到这一点。要调整大小的主位图始终为正方形。任何想法都非常感谢..!

我打算尝试不显示剪切区域,但从测试看来,最初的拉伸导致速度变慢......也无法看到如何计算非剪切区域......绘制到控件似乎是一种浪费,但似乎是使用内置的唯一方法在诸如stretchdraw 和alpha 绘制选项之类的函数中。

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);

显示正确,但随着图形变大,绘制速度迅速减慢......

4

0 回答 0