TImageList 使っていますか?
TImageList は複数の画像を解像度別に保存できたり、TGlyph と関連付ければ簡単に画像が描画できて便利ですよね!!
でも、TImagList から名前引きで Bitmap 取り出すのはとても面倒なんですよ。
画像はこんな感じに登録されているので 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 を取り出します。
便利~!
よかったら使ってみてください。