12

実行時に png 画像を .csv ファイルに追加する必要がありますTImageList。によって実装された関数を見てきましたTCustomImageListが、追加のみが許可されています

  • ビットマップ、
  • アイコンまたは
  • 別の画像リストからの画像

例えば:

function Add(Image, Mask: TBitmap): Integer;
function AddIcon(Image: TIcon): Integer;
function AddImage(Value: TCustomImageList; Index: Integer): Integer;
procedure AddImages(Value: TCustomImageList);
function AddMasked(Image: TBitmap; MaskColor: TColor): Integer;

この画像を BMP に変換せずに ImageList コンポーネントに PNG 画像を追加するにはどうすればよいですか?

IDE は、設計時に PNG を ImageList に追加できます。

ここに画像の説明を入力

次に、実行時にそれを行う必要があります。

4

3 に答える 3

22

Delphi XE は、アルファ チャネルを使用して png 画像と 32 ビット ビットマップを処理するためのすべてのサポートを備えています。png を ImageList に追加する方法は次のとおりです。

uses CommCtrl;

var pngbmp: TPngImage;
    bmp: TBitmap;
    ImageList: TImageList;
begin
  ImageList:=TImageList.Create(Self);
  ImageList.Masked:=false;
  ImageList.ColorDepth:=cd32bit;
  pngbmp:=TPNGImage.Create;
  pngbmp.LoadFromFile('test.png');
  bmp:=TBitmap.Create;
  pngbmp.AssignTo(bmp);
  // ====================================================
  // Important or else it gets alpha blended into the list! After Assign
  // AlphaFormat is afDefined which is OK if you want to draw 32 bit bmp
  // with alpha blending on a canvas but not OK if you put it into
  // ImageList -- it will be way too dark!
  // ====================================================
  bmp.AlphaFormat:=afIgnored;
  ImageList_Add(ImageList.Handle, bmp.Handle, 0);

含める必要があります

ImgList、PngImage

今試してみると:

  Pngbmp.Draw(Bmp1.Canvas,Rect);
and
  ImageList.Draw(Bmp1.Canvas,0,0,0,true);

画像が同じであることがわかります。実際には、アルファ ブレンディング中の丸め誤差により \pm 1 rgb の違いがいくつかありますが、肉眼では確認できません。bmp.AlphaFormat:=afIgnored の設定を怠っています。2 番目のイメージはさらに暗くなります。

よろしくお願いします、

アレックス

于 2011-01-06T18:57:32.337 に答える
3

MSDNによると、イメージリストにはビットマップとアイコンのみを含めることができます。png画像を画像リストに追加するには、最初にそれをアイコンに変換する必要があります。これを行うためのコードは、PngComponentsパッケージにあります。画像リストにPNG画像しかない場合は、簡単にするために、そのパッケージに付属しているTPngImageListを使用するだけです。

于 2010-11-19T07:50:26.973 に答える
1
  • TPngImage、PngImage のインスタンスを作成: PngImage
  • このインスタンスに画像をロードします PngImage.LoadFromFile(..)
  • TBitmap、Bitmap のインスタンスを作成します: TBitmap
  • PNG をビットマップに割り当てます。 Bitmap.Assign(PngImage)
  • ビットマップをイメージ リストに追加する
  • 仕事終わり!
于 2010-11-19T20:04:01.360 に答える