位图缩放问题 (TBitmap)
问题之一:
新建一个线程,在OnExecute加入如下代码
void __fastcall TScaleDibThread::Execute()
{
//---- Place thread code here ----
::Graphics::TBitmap* bmp1=NULL;
::Graphics::TBitmap* bmp2=NULL;
while(!Terminated)
{
::Sleep(10);
try
{
bmp1=new ::Graphics::TBitmap();
bmp1->PixelFormat=pf24bit;
bmp1->Width=640;
bmp1->Height=480;
bmp2=new ::Graphics::TBitmap();
bmp2->PixelFormat=pf24bit;
bmp2->Width=320;
bmp2->Height=240;
//有了下面这句StretchDraw后,程序会造成内存泄漏,注释掉后不会,这个StretchDraw有什么问题呢?
//bmp2->Canvas->StretchDraw(TRect(0,0,320,240),bmp1);
}__finally
{
if(bmp1!=NULL)
{
delete bmp1;
bmp1=NULL;
}
if(bmp2!=NULL)
{
delete bmp2;
bmp2=NULL;
}
}
};
}
运行,正常,但把其它的那行bmp2->Canvas->StretchDraw(TRect(0,0,320,240),bmp1);的注释去掉,则程序的造成迅速的资源泄漏,在任务管理器中观察内存和GDI对象,一分钟不到时就很明显了,请问这句StretchDraw有什么问题呢,
问题之二:
上面的代码是每次缩放操作时新建位图,如果换成一次创建,多次使用,仍然有问题,StretchDraw画图失败,