2010-11-30 19 views
1

Der folgende Code funktioniert wie erwartet mit Delphi 2007. Er nimmt ein Bitmap aus einer Bildliste, zeichnet ein rotes X darüber und fügt das neue Bitmap am Ende desselben hinzu Bildliste:Unterschied zwischen Delphi 2007 und 2010 beim Zeichnen auf Bitmaps

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); 

auf Delphi 2010 mit dem gleichen Code, der rote X wird ein transparentes X. Was ich hinzufügen/ändern tun müssen, um es mit Delphi 2010 wie erwartet funktioniert? Danke

+0

Ich habe dies auf 2010 versucht, und es hat wie erwartet funktioniert. –

+0

Die Ursache scheint die Konvertierung der Bitmap zu sein (es ist ursprünglich eine PNG-Ressource, die vor dieser Zeichenstufe in eine Bitmap konvertiert wird). Ich bin nicht sicher, wie die Konvertierung es verursacht, aber wir haben es einfach dadurch behoben, dass wir diese Ressource als Bitmap anstelle von PNG haben. – Mick

Antwort

0

DynBmp.TransParentColor ist wahrscheinlich clRed, bevor Sie es wieder zur Imagelist hinzufügen. Vielleicht ist TransparentMode nicht mehr tmFixed? Probieren Sie das Debugging aus und korrigieren Sie Ihren Code entsprechend Ihren Ergebnissen.

+0

Die transparente Farbe ist nicht rot (und außerdem ist die Grafik identisch mit der in D2007). Der Kommentar zu tmFixed macht keinen Sinn, da ich die transparente Farbe einstelle (siehe .TransparentColor). – Mick

+0

Außerdem ist die Bitmap falsch, bevor sie der Liste hinzugefügt wird (das Problem besteht also nicht darin, sie der Liste hinzuzufügen). – Mick

+1

Ich habe Delphi 2010 nicht, also kann ich nicht für Sie debuggen. Aber haben Sie geschlussfolgert, dass TransParentColor nicht clRed ist und TransparentMode tmFixed ist, bevor Sie es durch Debugging oder Argumentation zur Imagelist hinzufügen? –

2

Ich hatte das gleiche Problem mit Delphi XE2 und hatte es behoben, indem Sie die Option "Use XP Stil Bild mit Alpha-Kanal" im ImageList Editor deaktivieren. Wenn Sie diese Option aktiviert haben, deaktivieren Sie sie einfach.