用Delphi实现缩略图查看[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 lance 的 blog

本来想投个杂志什么的,现在想来也没那个必要了。

用delphi实现缩略图查看

作者:姜亮         


    缩略图英文也叫thumbnails,是现在的看图软件必备的基本功能之一,像acdsee,豪杰大眼睛等图片浏览软件都提供了此功能.其实利用delphi6.0提供的listview和imagelist控件就可以很方便地实现该功能.下面我们就一步一步打造一个属于自己的acdsee.

    一.编程思路

    listview能够以四种不同的方式显示数据,其中当以vsicon方式显示数据时,其图标来自于largeicon属性指定的imagelist控件.因此,只要我们把图片缩放后动态加载到imagelist控件中,就能够以缩略图方式在listview中显示了.需要注意的是,加载到imagelist中的图片大小尺寸必须相等;而且,为了避免图片缩放后变形,我们应该尽可能保证图片的长宽比例保持不变.我一直用"缩放"一词,这是因为对于大图片我们要缩小它,而对于小图片我们则要放大它.acdsee就是这样做的.最后还有一个小小的问题,我们如何实现acdsee中那些具有立体感的类似于panel的边框呢?你也许会说动态生成panel控件!这实在不是个好主意.因为那将占用大量的系统资源.我感觉 acdsee的那些panel不是真正的panel,而是被画上去的,所以我们要自己画panel.你也许会想自己画panel很麻烦吧,开始我也这样想,但当我把这个问题搞定后,发现它简直就是一块小蛋糕.^-^ 随便把一个有panel的窗体抓下来,然后在画图软件里放大8倍后观察,你就什么都明白了.其实,一个panel就是由四条线段组成的(如图一所示)。所有的问题都解决了,那就赶快动手吧!

(图一)

    .设计界面

    新建一工程,执行以下步骤:

    1。在窗体上添加一个scrollbox1控件,设置其align属性为alleft。

    2。在窗体上添加一个splitter1控件,设置其width为3,align属性为alleft。

    3。在窗体上添加一个listview1控件,设置其align属性为alclient,color属性为clbtnface。

    4。在scrollbox1里添加一个shelltreeview1控件(该控件在samples页面上),设置其align属性为altop。

    5。在scrollbox1里添加一个splitter2控件,设置其height为3,align属性为altop。

    6。在scrollbox1里添加一个panel1控件,设置其align属性为alclient。

    7。在panel1上添加一个image1控件。

    完成后的界面请参考图二。

   

图二

    三. 编写代码

    界面做好了,下面就该写代码了。

    1。单元的接口部分主要代码如下:

unit unit1;

interface

uses
 ...jpeg...

type
  tform1 = class(tform)
   ......

  private
    progressbar1:tprogressbar;
    originalbmp,thumbbmp:tbitmap;
    previewbmp:tbitmap;
    thumbjpg:tjpegimage;
    previewjpg:tjpegimage;
    isrefreshimagefinished:boolean;
    { private declarations }
  public
    procedure refreshimage;
    procedure showpreimagefit(const imagefilename:string);
    { public declarations }
  end;

type

本文关键:Delphi 缩略图
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top