简体   繁体   English

如何用JPG或PNG制作缩略图并将其加载到Timage控件中?

[英]How to make a thumbnail from a JPG or PNG and load it into a Timage control?

How can I make a thumbnail from a JPG or PNG and load that thumbnail into a TImage control? 如何从JPG或PNG制作缩略图并将该缩略图加载到TImage控件中?

I've tried stuff like this, but the TImage does not look like is loading something. 我已经尝试过类似的东西,但是TImage看起来好像不是正在加载东西。

Image2 is a TImage control. Image2是一个TImage控件。

function resize2(source: string): TBitmap;
var
  BMPFile, ScreenBMP: TBitmap;
begin
  BMPFile := TBitmap.Create;
  try
    BMPFile.LoadFromFile(source);
    ScreenBMP := TBitmap.Create;
    ScreenBMP.PixelFormat := BMPFile.PixelFormat;
    ScreenBMP.Width := 10;
    ScreenBMP.Height := 10;
    ScreenBMP.Canvas.StretchDraw(Rect(0,0, ScreenBMP.Width, ScreenBMP.Height), BMPFile);
    Result := ScreenBMP;
  finally
    BMPFile.Free;
  end;
end;

procedure TAlpha.dbeditTextBoxChange(Sender: TObject);
var
  pic1: string;
  mimapa: TBitmap;
begin
  try
    pic1 := dm.TableNotes.FieldByName('PathPic').AsVariant;
    mimapa := resize2(pic1);

    //all of these are not working
    Image2.Assign(mimapa);
    image2.Picture.Bitmap := mimapa;

The VCL's TBitmap supports only BMP images. VCL的TBitmap仅支持BMP图像。 If you try to load any other kind of image into it, you will get an exception raised. 如果尝试将任何其他类型的图像加载到其中,则会引发异常。

To load a JPG, you need to use TJPEGImage instead. 要加载JPG,您需要改用TJPEGImage To load a PNG, use TPNGImage instead. 要加载PNG,请改用TPNGImage

You can use a TPicture to help you with that task, eg: 您可以使用TPicture帮助完成该任务,例如:

uses
 ..., Vcl.Graphics, Vcl.Imaging.jpeg, Vcl.Imaging.pngimage;

function resize2(source: string): TBitmap;
var
  Pic: TPicture;
begin
  Pic := TPicture.Create;
  try
    Pic.LoadFromFile(source);
    Result := TBitmap.Create;
    try
      if Pic.Graphic is TBitmap then
        Result.PixelFormat := TBitmap(Pic.Graphic).PixelFormat
      else
        Result.PixelFormat := pf32bit;
      Result.Width := 10;
      Result.Height := 10;
      Result.Canvas.StretchDraw(Rect(0, 0, Result.Width, Result.Height), Pic.Graphic);
    except
      Result.Free;
      raise;
    end;
  finally
    Pic.Free;
  end;
end;

procedure TAlpha.dbeditTextBoxChange(Sender: TObject);
var
  pic1: string;
  mimapa: TBitmap;
begin
  try
    pic1 := dm.TableNotes.FieldByName('PathPic').AsString;
    mimapa := resize2(pic1);
    try
      image2.Picture.Assign(mimapa);
    finally
      mimapa.Free;
    end;
    ...
  except
   ...
  end;
end;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM