5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DelphiAdvent Calendar 2024

Day 17

[Delphi FMX][小ネタ] TImageList から名前引きで Bitmap を取得する

Last updated at Posted at 2024-12-16

TImageList 使っていますか?

TImageList は複数の画像を解像度別に保存できたり、TGlyph と関連付ければ簡単に画像が描画できて便利ですよね!!

でも、TImagList から名前引きで Bitmap 取り出すのはとても面倒なんですよ。

image.png

画像はこんな感じに登録されているので Prof っていう名前で Bitmap 取り出せたらいいなあって思うじゃないですか。

たったこれだけのことなのに、そこそこコード書かないといけないので、簡単に取れるようにしておきました!

TImageList の class helper を定義して GetBitmap というメソッドを生やします。

(*
 * ImageListHelper
 *
 * PLATFORMS
 *   All
 *
 * LICENSE
 *   Copyright (c) 2018 HOSOKAWA Jun
 *   Released under the MIT license
 *   http://opensource.org/licenses/mit-license.php
 *
 * 2018/04/08 Version 1.0.0
 * Programmed by HOSOKAWA Jun (twitter: @pik)
 *)

unit PK.Utils.ImageListHelper;

interface

uses
  FMX.Graphics
  , FMX.ImgList
  ;

type
  TImageListHelper = class helper for TImageList
  public
    function GetBitmap(
      const AName: String;
      const ABmp: TBitmap;
      const AScale: Single = 1): Boolean;
  end;

implementation

uses
  System.Types
  , FMX.MultiResBitmap
  ;

{ TImageHelper }

function TImageListHelper.GetBitmap(
  const AName: String;
  const ABmp: TBitmap;
  const AScale: Single): Boolean;
var
  Item: TCustomBitmapItem;
  Size: TSize;
  Bmp: TBitmap;
begin
  Result := BitmapItemByName(AName, Item, Size);
  if (not Result) or (ABmp = nil) then
    Exit;

  Bmp := Item.MultiResBitmap.Bitmaps[AScale];
  Result := Bmp <> nil;

  if Result then
    ABmp.Assign(Bmp);
end;

end.

使い方は、とってもかんたん!
GetBitmap に名前と Bitmap のインスタンスを渡すだけ。

procedure TForm1.Button1Click(Sender: TObject);
begin
  ImageList1.GetBitmap('Prof', Image1.Bitmap);
end;

取得成功であれば True が返ります。
また、デフォルトでは Scale 1 の画像を取得します。
第3引数の値に 1.5 とかいれると、そのスケールの Bitmap を取り出します。

便利~!
よかったら使ってみてください。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?