我想实现对某个目录下面的图像文件(jpg)的预览,就像ACDSee 那样将所有图片都以小的图片方式预览放在一个容器里面,请问高手们,应如何实现?

解决方案 »

  1.   

    Image控制不是有一个属性Stretch吗,把它设为True,不就可以跟据Image的大小调整图像大小了吗,不知道你是不是这个意思.
      

  2.   

    to mengrui(梦睿) 
     首先谢谢你
     我是说实现像 ACDsee 那样预览某个目录下面的所有图像文件,如果直接使用image来显示原始文件,如果文件太多(n十,n百....个)这样系统资源占用会太大,不合理,我想 ACDsee 肯定是在预览前对图像进行了某种处理,从而减少系统资源的占用,不知我说的你明白了吗?
      

  3.   

    你搜ehom的帖子,,相信能够解答你的问题
      

  4.   

    http://expert.csdn.net/Expert/topic/885/885240.xml?temp=2.094668E-02有看吗?
      

  5.   

    用TQRImage控件!
    有问题请发信息到我的E-mail:[email protected]
      

  6.   

    to glassesboy(glassesboy) 
    对不起,我看了虽然有点眉目,但还是不知如何所加到listview 或scrollbox 中,请大哥再帮小弟一把呀 OriginalBmp 是什么呀
    我理解能力差呀:(
      

  7.   

    我没有收到呀,能再发一遍吗?
    [email protected]
    [email protected]
      

  8.   

    简单方法1:
    用TPicture去读图形文件,
    用TPicture.Graphic去判断此图形的大小等你要的属性,
    用TBitmap去按你的要求重新绘制,
    当然,一定要用多线程。看看我的程序,就有这种Thumb
    www.netgocn.com
      

  9.   

    我又回来了,无意中看到一篇文章,不知对你有没有用,我没试过。
    用Delphi读取JPEG文件的缩览图
    --------------------------------------------------------------------------------
      JPEG图像文件以高压缩比和高图像质量著称,市面上的图库光盘中的图像文件大都是JPEG格式的。怎样从一大堆JPEG文件中查找合适的图像呢?使用JPEG文件的缩览图就是其中方法之一。
      在PhotoShop 4.0(或以上版本)的打开文件对话框中,当打开JPEG文件时,PhotoShop很快把它的缩览图显示出来。为什么PhotoShop能这么快地显示出JPEG文件的缩览图呢?
      原来PhotoShop在保存JPEG文件时把它的缩览图也保存在文件里。PhotoShop定义了新的段FF ED,这个段保存了一个JPEG文件格式的缩览图,大图中有小图。FF ED段后两个字节是这个段的长度,在这个段里有缩览图的开始标志FF D8和结束标志FF D9,将这个段拷贝出来即可获得该图的缩览图。值得注意的是PhotoShop 4.0解出的缩览图,像素格式不是常规的RGB,而是BGR格式,所以还得加入BGR转为RGB的代码,转化过程是在内存里把B和R的位置交换。
      下面是Delphi编写的快速读取PhotoShop 4.0(或以上版本)JPEG文件的缩览图的程序,程序用TFileStream读取JPEG文件的FF ED段,结合TmemoryStream、TJPEGimage, 返回BMP格式的缩览图。
      function LoadThumb(filename:shortstring):TBitmap;
      procedure BGR2RGB(var bmp:TBitmap);
      var
      x,y:integer; t:char; data:pchar;
      begin
      for y:=bmp.Height-1 downto 0 do
      begin
      data:=bmp.ScanLine[y];
      for x:=0 to bmp.Width-1 do
      begin
      t:=data[x*3];
      data[x*3]:=data[x*3+2];
      data[x*3+2]:=t;
      end;
      end;
      end;
      var
      fstream:Tfilestream; mstream:Tmemorystream;
      j,i:word;data:pchar; buf:array [0..3] of byte;
      filesize:DWORD; fjpg:Tjpegimage;bmp:Tbitmap;
      begin
      result:=nil;
      fstream:=Tfilestream.create(filename,fmOpenRead);
      //建立文件流,读JPEG文件
      fstream.Seek(20,soFromBeginning); //FF ED段在文件的第20个字节处
      fstream.Read(buf,sizeof(buf));
      if PWORD(@buf[0])^=$EDFF then
      begin
      j:=buf[2]*256+buf[3]; //FF ED的大小,高位在前,低位在后
      if j<1024 then //FF ED段的大小若为1024个字节则文件不包含缩览图,退出程序
      begin
      fstream.free;
      exit;
      end;
      mstream:=TMemorystream.Create;//建立内存流
      mstream.CopyFrom(fstream,j); //把FF ED段拷贝到mstream
      data:=mstream.Memory;
      for i:=300 to 700 do //找缩览图的开始标志FF D8
      if PWORD(@data[i])^=$D8FF then break;
      if i<700 then
      begin
      fjpg:=Tjpegimage.Create; //建立TJPEGimage 解出缩览图
      bmp:=TBitmap.Create;
      mstream.Position:=i;
      fjpg.LoadFromStream(mstream);//fjpg读取mstream
      bmp.Assign(fjpg); //JPEG转BMP
      if PWORD(@data[i+57])^=$2e34 then //PhotoShop 4.0的缩览图
      BGR2RGB(bmp); //BMP的像素格式BGR 而不是RGB,要把BGR转化为RGB
      result:=bmp; //函数返回BMP
      mstream.Free;
      fjpg.Free; //释放Object
      end;end;
      fstream.free;
      end;
      可直接把Delphi 的Timage可视控件拖到Form上,用image.picture.bitmap:= LoadThumb(filename) 即可显示PhotoShop JPEG文件的缩览图。
      

  10.   

    感谢各位的帮助,这个问题我已经解决了我的思路如下,供大家参考首先读取图像文件,再读取时可以指定图像的scal属性(可以提高图片的处理速度,其实就是缩小图片减少数据),然后把文件转换成指定大小的icon文件,然后动态生成一个timage显示该icon把它加入到scrollBox中去(listview 用这种方法后面有太多问题不好解决)to mengrui(梦睿):谢谢你的帮助,你的代码我一参考,并有使用
    to lixif() :我的方法也吸取的你的思路,谢谢你
    glassesboy(glassesboy) :特别感谢你对我的帮助好了,在此谢谢你们,现在结贴发薪:)