高手过来看一下
下面是用ListView做的和ACDSEE一样效果,可以在浏览某个目录的时候显示所有图像的内容,可是如果该文件夹下有200来张1024*768的jpg图像的时候就好慢,如何解决此问题,是否有更好的方法,谢谢!!!
TImageList * SmallBitmap=new TImageList(this);
Graphics::TBitmap * bmp=new Graphics::TBitmap();
Graphics::TBitmap * bmp100=new Graphics::TBitmap();
HDC hdc;
TSearchRec rt;
int Attribute,FindOver;
SmallBitmap->Width=80;
SmallBitmap->Height=60;
SmallBitmap->Clear();
ListView1->Items->Clear();
ListView1->LargeImages=SmallBitmap;
Attribute=faAnyFile;
FindOver=FindFirst(Dir+"\\*.bmp",Attribute,rt);
while(!FindOver)
{
bmp->LoadFromFile(Dir+"\\"+rt.Name);
bmp100->Width=80;
bmp100->Height=60;
::SetStretchBltMode(bmp100->Canvas->Handle,COLORONCOLOR);
::StretchBlt(bmp100->Canvas->Handle,0,0,80,60,
bmp->Canvas->Handle,0,0,bmp->Width,bmp->Height-0,0xCC0020);
int i=SmallBitmap->Add(bmp100,NULL);
lvitem=ListView1->Items->Add();
lvitem->Caption=rt.Name;
lvitem->ImageIndex=i;
FindOver=FindNext(rt);
}
FindOver=FindFirst(Dir+"\\*.jpg",Attribute,rt);
while(!FindOver)
{
TJPEGImage *JpegImage1=new TJPEGImage();
JpegImage1->LoadFromFile(Dir+"\\"+rt.Name);
bmp->Width = JpegImage1->Width ;
bmp->Height = JpegImage1->Height ;
bmp->Canvas->StretchDraw(Rect
(0,0,bmp->Width,bmp->Height),JpegImage1);
bmp100->Width=80;
bmp100->Height=60;
::SetStretchBltMode(bmp100->Canvas->Handle,COLORONCOLOR);
::StretchBlt(bmp100->Canvas->Handle,0,0,80,60,
bmp->Canvas->Handle,0,0,bmp->Width,bmp->Height-0,0xCC0020);
int i=SmallBitmap->Add(bmp100,NULL);
lvitem=ListView1->Items->Add();
lvitem->Caption=rt.Name;
lvitem->ImageIndex=i;
FindOver=FindNext(rt);
}
FindClose(rt);
delete bmp;
delete bmp100;
问题点数:0、回复次数:1Top
1 楼kingfish(工作很忙,很少来csdn...)回复于 2005-04-03 20:14:25 得分 0
觉得ACDSEE的浏览也比较慢。
建议
(1)循环中加Application->ProcessMessages(); 这样已经装载的可以先显示出来
或者
(2)全部装载完显示,如下(速度稍有提高)
ListView1->Items->BeginUpdate();
//你的循环代码
ListView1->Items->EndUpdate();
图像方面不清楚还有无提高的余地。Top




