zoukankan      html  css  js  c++  java
  • [delphi]向ImageList中加入png类型的资源图片

    向ImageList中动态加入Png图片有些失真,经过多方查询,发现需要将Bitmap的AlphaFormat指定一下。

    下面代码支持多层Png导入到ImageList。

    //向ImageList中加入png类型的资源图片
    procedure AddPngToImageList(AImageList: TImagelist; AResName: string);
    var
      LResStream: TStream;
      LPng: TPngImage;
      LBitMap, LRowBitMap: TBitmap;
      LRect, LRowRect: TRect;
    begin
      //AImageList.DrawingStyle := dsTransparent;
      AImageList.ColorDepth := cd32Bit;
      LResStream := TResourceStream.Create(uResourcesImpl.GetResHandle, AResName, RT_RCDATA);
      LPng := TPngImage.Create;
      LBitMap := TBitmap.Create;
      try
        LPng.LoadFromStream(LResStream);
        LBitMap.Assign(LPng);
        LBitMap.AlphaFormat := afIgnored;
        if LBitMap.Height > AImageList.Height then
        begin
          LRowBitMap := TBitmap.Create;
          try
            LRowBitMap.Width := LBitMap.Width;
            LRowBitMap.Height := AImageList.Height;
            LRect := Rect(0, 0, LBitMap.Width, LRowBitMap.Height);
            LRowRect := Rect(0, 0, LRowBitMap.Width, LRowBitMap.Height);
            while LRect.Bottom <= LBitMap.Height do
            begin
              LRowBitMap.Canvas.CopyRect(LRowRect, LBitMap.Canvas, LRect);
              OffsetRect(LRect, 0, LRowBitMap.Height);
              AImageList.Add(LRowBitMap, nil);
            end;
          finally
            LRowBitMap.Free;
          end;
        end
        else
          AImageList.Add(LBitMap, nil);
      finally
        LResStream.Free;
        LPng.Free;
        LBitMap.Free;
      end;
    end;
  • 相关阅读:
    《最小割模型在信息学竞赛中的应用》最大权闭合图
    《最小割模型在信息学竞赛中的应用》最优标号
    《最小割模型在信息学竞赛中的应用》网络战争
    P3254 圆桌问题
    P2766 最长不下降子序列问题
    P2754 星际转移问题
    洛谷P2756 飞行员配对方案问题
    状态压缩dp 炮兵阵地
    状态压缩—玉米田
    CCF 202006-2 稀疏向量
  • 原文地址:https://www.cnblogs.com/igaoshang/p/addPngToImageList.html
Copyright © 2011-2022 走看看