CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

高手过来看一下

楼主wunanbin1978()2005-04-03 15:32:18 在 C++ Builder / 基础类 提问

下面是用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

相关问题

  • 请看一下
  • 请看一下?
  • 请看一下
  • 请看一下!
  • 看一下
  • 大家看一下!
  • 大家看一下~
  • 帮我看一下...
  • 帮忙,看一下!
  • ∷∷帮忙看一下∷∷

关键词

  • 图像
  • bmp
  • findover
  • smallbitmap
  • jpegimage
  • lvitem
  • rt
  • listview
  • tbitmap
  • canvas

得分解答快速导航

  • 帖主:wunanbin1978

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo