2010-11-30 12 views
1

次のコードは、Delphi 2007で期待どおりに動作します。画像リストからビットマップを取り出し、その上に赤いXを描画し、新しいビットマップを同じ画像リスト:デルファイ2010年ビットマップを描画するときのDelphi 2007と2010の違い

DynBmp:=Graphics.TBitMap.Create; 
    DynBmp.Transparent:=TRUE; 
    DynBmp.TransparentMode:=tmFixed; 
    ImgList.GetBitmap(9, DynBmp); 
    DynBmp.TransparentColor:=DynBmp.canvas.pixels[0, DynBmp.Height - 1]; 
    DynBmp.Canvas.MoveTo(1, 1); 
    DynBmp.Canvas.Pen.Style:=psAlternate; //psSolid; 
    DynBmp.Canvas.Pen.Color:=clRed; 
    DynBmp.Canvas.Pen.Width:=2; 
    DynBmp.Canvas.LineTo(DynBmp.Width - 1, DynBmp.Height - 1); 
    DynBmp.Canvas.MoveTo(DynBmp.Width - 1, 1); 
    DynBmp.Canvas.LineTo(1, DynBmp.Height - 1); 
    FErrBmpIdx:=ImgList.AddMasked(DynBmp, DynBmp.TransParentColor); 
    aResetIcon.ImageIndex:=FErrBmpIdx; 
    FreeAndNil(DynBmp); 

は、同じコードを使用して、赤いXは、私は、Delphi 2010で期待通りに働い取得する/変更を追加する必要がありますどのような透明X.なり?ありがとう

+0

私は2010年にこれを試しましたが、期待どおりに機能しました。 –

+0

原因はビットマップ(当初はPNGリソースで、この描画段階の前にビットマップに変換されています)の変換のようです。どのように変換が起こっているのか分かりませんが、PNGの代わりにこのリソースをビットマップとして持つだけで解決しました。 – Mick

答えて

0

DynBmp.TransParentColorはおそらくそれを再度イメージリストに追加する前にclRedされています。多分TransparentModeはtmFixedではないでしょうか?デバッグを行い、あなたの所見に基づいてコードを修正してください。

+0

透明色は赤ではありません(また、グラフィックはD2007のものと同じです)。 tmFixedに関するコメントは、私が透明な色を設定しているので意味をなさない(.TransparentColorを参照)。 – Mick

+0

また、ビットマップはリストに追加される前に間違っています(問題はリストに追加することではありません)。 – Mick

+1

私はDelphi 2010を持っていないので、私はあなたのためにデバッグすることはできません。しかし、あなたは、TransParentColorがclRedではなく、TransparentModeはデバッグや推論によってimagelistに追加する前にtmFixedであると結論付けましたか? –

2

私は、Delphi XE2と同じ問題に直面していたし、イメージリストエディタでオプション「アルファチャンネルと利用XPスタイルの画像を」オフにして、それを修正していました。そのオプションをチェックした場合は、チェックをはずしてください。

関連する問題