2011-05-04 57 views
5

我正在將我的代碼升級到Delphi XE(來自Delphi 7),並試圖消除所有不必要的庫。我已經使用過PNGComponents很久了,但現在是時候繼續使用本地TImageList和TPNGImage了。如何使用Delphi XE從資源加載時保存PNGImage掩碼

我的代碼的一部分在運行時從鏈接的資源中加載圖像列表。爲此我的工作PNGComponents代碼:

function CreateAndLoadImageList(ASize : integer) : TPngImageList; 
var 
    PngObject : TPngObject; 
    I : integer; 
begin 
    Result := TPngImageList.Create(nil); 

    Result.BeginUpdate; 
    try 

    Result.Width := ASize; 
    Result.Height := ASize; 

    PngObject := TPngObject.create; 
    try 

     For I := 0 to Length(ArtImageNames) -1 do 
     begin 
     PngObject.LoadFromResourceName(hInstance, Format('AImg%d_%d', [ASize, I])); 

     Result.PngImages.Add(False).PngImage := PngObject; 
     end; 

    finally 
     PngObject.Free; 
    end; 


    finally 
    Result.EndUpdate; 
    end; 

end; 

this question使用一個答案,現在我想下面的代碼,它顯示了圖像,但與黑色的背景,大概是因爲面具丟失。我想我需要一個掩碼位圖傳遞給ImageList_Add'0',但我對這個東西很窮。有誰知道我會如何得到這個工作?

function CreateAndLoadImageList(ASize : integer) : TImageList; 
var 
    PngImage : TPngImage; 
    bmp : TBitmap; 
    I : integer; 
begin 

    Result := TImageList.Create(nil); 
    Result.Masked := False; 
    Result.DrawingStyle := dsTransparent; 

    Result.BeginUpdate; 
    try 

    Result.Width := ASize; 
    Result.Height := ASize; 
    Result.Masked := False; 

    PngImage := TPngImage.create; 
    try 

     For I := 0 to Length(ArtImageNames) -1 do 
     begin 
     PngImage.LoadFromResourceName(hInstance, Format('AImg%d_%d', [ASize, I])); 


     bmp:=TBitmap.Create; 
     PngImage.AssignTo(bmp); 

     bmp.AlphaFormat:=afIgnored; 

     ImageList_Add(Result.Handle, bmp.Handle, 0); 
     Bmp.Free; 

     end; 
    finally 
     PngImage.Free; 
    end; 


    finally 
    Result.EndUpdate; 
    end; 

end; 

回答

2

PNG圖像使用alpha通道做部分透明。他們不使用面具。我想象你的問題是,你沒有保留在你的圖像列表中的alpha。

  • 您應該將圖像列表的ColorDepth設置爲cd32Bit
  • 我希望當您將PNG圖像指定給它時,正確設置位圖屬性,以便刪除設置AlphaFormat的行。

順便說一下,它的目的是使用Assign而不是AssignToAssignTo是一種內部方法,可以爲TPersistent啓用輕度形式的雙重派遣。

+0

ColorDepth to cd32Bit做到了。很好,謝謝。 – 2011-05-04 15:48:07