본문 바로가기
FireMonkey 예제 자료

파이어몽키[Window,Android] 이미지 리스트 비트맵 추가할수 있게 하는 코드

by kimsyo11 2022. 1. 5.
728x90
uses FMX.MultiresBitmap;

type
  TImageListHelper = class helper for TImageList
    function Add(aBitmap: TBitmap): integer;
  end;


function TImageListHelper.Add(aBitmap: TBitmap): integer;
const
  SCALE = 1;
var
  vSource: TCustomSourceItem;
  vBitmapItem: TCustomBitmapItem;
  vDest: TCustomDestinationItem;
  vLayer: TLayer;
begin
  Result := -1;
  if (aBitmap.Width = 0) or (aBitmap.Height = 0) then exit;

  // 여기서 비트맵 소스 추가
  vSource := Source.Add;
  vSource.MultiResBitmap.TransparentColor := TColorRec.Fuchsia;
  vSource.MultiResBitmap.SizeKind := TSizeKind.Source;
  vSource.MultiResBitmap.Width := Round(aBitmap.Width / SCALE);
  vSource.MultiResBitmap.Height := Round(aBitmap.Height / SCALE);
  vBitmapItem := vSource.MultiResBitmap.ItemByScale(SCALE, True, True);
  if vBitmapItem = nil then
  begin
    vBitmapItem := vSource.MultiResBitmap.Add;
    vBitmapItem.Scale := Scale;
  end;
  vBitmapItem.Bitmap.Assign(aBitmap);

  vDest := Destination.Add;
  vLayer := vDest.Layers.Add;
  vLayer.SourceRect.Rect := TRectF.Create(TPoint.Zero, vSource.MultiResBitmap.Width,
      vSource.MultiResBitmap.Height);
  vLayer.Name := vSource.Name;
  Result := vDest.Index;
end;

 

 

↑↑↑↑↑↑↑ 위의 코드를 추가한후

간단하게 예로 TImageList의 컴포넌트가 자연스레 Add가 추가되어 나옵니다

 


procedure Test;
begin
 var IMGBit := TBitmap.Create;
      IMGBit.LoadFromStream(IMGStream);
Form1.ImageList1.Add(IMGBit);
end;

 


 

ImageList1의 두번 갖고 오게 되면 데이터가 쌓여서 메모리가 누적이 됩니다 고로

아래 처럼 Add 만나기전에 Clear로 정리 해주면 좋습니다

Form1.ImageList1.Source.Clear;
Form1.ImageList1.Destination.Clear;
728x90

댓글