不知道为什么用listview显示缩略图总有问题,请大家帮忙看下下载地址里的工程源码,告诉我到底哪里出问题了,谢谢了
下载地址:
http://cnc.fs1.bay.cech.com.cn/download/23232781/adbrave/633767034992187500/55764ab7cca3ead81c8a55485739ba67/%E5%9B%BE%E7%89%87%E7%BC%A9%E7%95%A5%E5%9B%BE%E6%B5%8F%E8%A7%88.rar

解决方案 »

  1.   

    哦,抱歉,那用下面这个链接吧..http://www.pckno.com/test/图片缩略图浏览.rar
      

  2.   

    你的问题是什么,我用bmp试了下,是可以的。
    另外,你的jpeg文件找不到,没有包括到压缩包中。
      

  3.   

    试了,这样就行了,不知你有什么问题。
    procedure TForm1.Button2Click(Sender: TObject);
    var
      TheBitmap:TBitmap ;
      TheJpeg:TJPEGImage;
      aa:tlistitem;
      i:integer;
    begin
      ImageList1.Clear;
      for i:=1 to 4 do
      begin
      TheJpeg := TJPEGImage.Create;
      TheJpeg.LoadFromFile('.\Images\'+inttostr(i)+'.jpg');
      TheBitmap := TBitmap.Create ;
      TheBitmap.Assign(TheJpeg);
      ImageList1.Width:=80;
      ImageList1.Height:=80;
      ImageList1.Add(TheBitmap, nil) ;
      aa:=listview1.Items.Add;
      aa.Caption:=inttostr(i)+'.jpg';
      aa.ImageIndex :=ImageList1.Count -1;
      FreeAndNil(TheBitmap) ;
      FreeAndNil(TheJpeg);
      end;end;
      

  4.   

    这样就行了:
    procedure ScaleToBitmap(ASrc, ADest: TBitmap);
    var
      w, h, row, col: Integer;
      sw, sh, scale: Single;
      src, dest: PRGBTriple;
    begin
      w := ASrc.Width;
      h := ASrc.Height;
      sw := w / 80;
      sh := h / 80;
      scale := Max(sw, sh);
      ADest.Width := Trunc(ASrc.Width / scale);
      ADest.Height := Trunc(ASrc.Height / scale);
      for row := 0 to ADest.Height - 1 do
      begin
        src := ASrc.ScanLine[Trunc(row * scale)];
        dest := ADest.ScanLine[row];
        for col := 0 to ADest.Width - 1 do
        begin
          dest^ := PRGBTriple(Integer(src) + SizeOf(TRGBTriple) * Trunc(col * scale))^;
          Inc(dest);
        end;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      TheBitmap, DestBitmap:TBitmap ;
      TheJpeg:TJPEGImage;
      aa:tlistitem;
      i:integer;
    begin
      ImageList1.Clear;
      for i:=1 to 4 do
      begin
      TheJpeg := TJPEGImage.Create;
      TheJpeg.LoadFromFile('.\Images\'+inttostr(i)+'.jpg');
      TheBitmap := TBitmap.Create ;
      TheBitmap.Assign(TheJpeg);
      TheBitmap.PixelFormat := pf24Bit;
      DestBitmap := TBitmap.Create;
      DestBitmap.PixelFormat := pf24Bit;
      ScaleToBitmap(TheBitmap, DestBitmap);
      DestBitmap.Width := 80;
      DestBitmap.Height := 80;
      ImageList1.Width:=80;
      ImageList1.Height:=80;
      ImageList1.Add(DestBitmap, nil) ;
      aa:=listview1.Items.Add;
      aa.Caption:=inttostr(i)+'.jpg';
      aa.ImageIndex :=ImageList1.Count -1;
      FreeAndNil(DestBitmap);
      FreeAndNil(TheBitmap) ;
      FreeAndNil(TheJpeg);
      end;end;
      

  5.   

    为了让缩略图在中间显示,改用下面的代码:
    procedure ScaleToBitmap(ASrc, ADest: TBitmap);
    var
      w, h, newW, newH, row, col, offsetW, offsetH: Integer;
      sw, sh, scale: Single;
      src, dest: PRGBTriple;
    begin
      w := ASrc.Width;
      h := ASrc.Height;
      sw := w / 80;
      sh := h / 80;
      scale := Max(sw, sh);
      newW := Trunc(ASrc.Width / scale);
      newH := Trunc(ASrc.Height / scale);
      offsetW := (ADest.Width - newW) div 2;
      offsetH := (ADest.Height - newH) div 2;
      for row := 0 to newH - 1 do
      begin
        src := ASrc.ScanLine[Trunc(row * scale)];
        dest := PRGBTriple(Integer(ADest.ScanLine[offsetH + row]) + offsetW * SizeOf(TRGBTriple));
        for col := 0 to newW - 1 do
        begin
          dest^ := PRGBTriple(Integer(src) + SizeOf(TRGBTriple) * Trunc(col * scale))^;
          Inc(dest);
        end;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      TheBitmap, DestBitmap:TBitmap ;
      TheJpeg:TJPEGImage;
      aa:tlistitem;
      i:integer;
    begin
      ImageList1.Clear;
      for i:=1 to 5 do
      begin
      TheJpeg := TJPEGImage.Create;
      TheJpeg.LoadFromFile('.\Images\'+inttostr(i)+'.jpg');
      TheBitmap := TBitmap.Create ;
      TheBitmap.Assign(TheJpeg);
      TheBitmap.PixelFormat := pf24Bit;
      DestBitmap := TBitmap.Create;
      DestBitmap.Width := 80;
      DestBitmap.Height := 80;
      DestBitmap.PixelFormat := pf24Bit;
      ScaleToBitmap(TheBitmap, DestBitmap);
      ImageList1.Width:=80;
      ImageList1.Height:=80;
      ImageList1.Add(DestBitmap, nil) ;
      aa:=listview1.Items.Add;
      aa.Caption:=inttostr(i)+'.jpg';
      aa.ImageIndex :=ImageList1.Count -1;
      FreeAndNil(DestBitmap);
      FreeAndNil(TheBitmap) ;
      FreeAndNil(TheJpeg);
      end;end;