![]() |
weissen Hintergrund eines Icons entfernen
Hallo,
![]() Soweit so gut. Da ich das Icon aber für die Glyph-Property eines BitBtns brauche, konvertier ich es in ein Bitmap um. Der ganze Code schaut so aus:
Delphi-Quellcode:
Es funktioniert eigentlich ganz gut. Nur das Icon hat einen weissen Hintergrund.
procedure Papierkorb_Icon_laden(Button: TBitBtn);
var piidlist : PItemIDList; FileInfo : SHFILEINFO; Bitmap : TBitmap; Icon : TIcon; begin //Bitmap erzeugen Bitmap := TBitmap.Create; //Icon erzeugen Icon := TIcon.Create; try //Wir holen uns den Pfad zum Papierkorb SHGetSpecialFolderLocation(Button.Handle, CSIDL_BITBUCKET, piidlist); //Holen uns Infos zum Papierkorb, hier das Icon SHGetFileInfo(PChar(piidlist), 0, FileInfo, sizeof(FileInfo), SHGFI_ICON Or SHGFI_PIDL); // Icon.Handle := FileInfo.hIcon; with Bitmap do begin Height := Icon.Height; Width := Icon.Width; TransparentColor := clWhite; Transparent := true; Canvas.Draw(0, 0, Icon); end; //Weisen der Form dieses Icon zu Button.Glyph.Assign(Bitmap); finally //Bitmap löschen und freigeben FreeAndNil(Bitmap); //Icon löschen und freigeben FreeAndNil(Icon); end; end; Leider bekomm ich den nicht weg. Ich hätte gerne das reine Icon. Dieser Teil:
Delphi-Quellcode:
brachte leider auch keinen Erfolg.
with Bitmap do
begin TransparentColor := clWhite; Transparent := true; end; Wie könnt ich den Hintergrund weg/transparent bekommen? |
Re: weissen Hintergrund eines Icons entfernen
imho übernimmt TSpeedbutton.glyph (sowie viele andere VCL-Komponenten) nicht die Transparent-Einstelung des TBtmaps sondern die farbe an Position 0,0...also das 1. pixel ganz oben links in der ecke.
wüsste aber jetzt nicht, ob man das irgendwie setzen kann, falls man das erste pixel benötigt und eine andere Fabe transparent haben will HTH Frank |
Re: weissen Hintergrund eines Icons entfernen
Hallo,
es handelt sich aber nicht um einen Speedbutton sondern um einen BitBtn |
Re: weissen Hintergrund eines Icons entfernen
hab mir mal meine quellen von TBitBn angeschaut...dabei ist mir aufgefallen, dass das Glyphbitmap vor dem Zeichnen nach TButtonGlyph gecasted wird (warum auch immer).
auffällig ist, dass in dessen constructor die transparentcolor (clOlive) gesetzt wird, jedoch nirgends anders geändert wird (auch nicht im OnChanged). mein folgender Test mit deinem Code hat den Papierkorb transparent gemalt...nicht schön, aber hab keine Möglichkeit mit weniger code gefunden.
Delphi-Quellcode:
bevor es noch jemand probiert...folgendes funtioniert nicht:
with Bitmap do
begin Height := Icon.Height; Width := Icon.Width; canvas.Brush.Color:=clOlive; //neue Transparentfarbe an TButtonGlyph anpassen canvas.FillRect(rect(0,0,width,height)); TransparentColor := canvas.Brush.Color; Transparent := true; Canvas.Draw(0, 0, Icon); end;
Delphi-Quellcode:
ist übrigends bei TSpeedbutton der gleiche Mist...
Button.Glyph.Assign(Bitmap);
button.Glyph.TransparentColor:=button.Glyph.Canvas.Pixels[0,0]; button.Glyph.Transparent:=true; HTH Frank |
Re: weissen Hintergrund eines Icons entfernen
Hallo,
danke für deine Hilfe. Der weisse Hintergrund war dann zwar weg, aber leider war dann das Symbol sehr verzehrt. Da lass ich lieber den weissen Hintergrund. Trotzdem Danke! |
Re: weissen Hintergrund eines Icons entfernen
Zitat:
und nicht noch pixel anderer Farben (Brush) enthält. Das Format sollte indiziert sein um solche Probleme zu vermeiden. gruss Emil |
Re: weissen Hintergrund eines Icons entfernen
wie meinst das?
|
Re: weissen Hintergrund eines Icons entfernen
Zitat:
Bittiefe .. wenn vorher 256 Farben dann sind es nachher 32Bit. Das führt dazu das die Hintergrundfarbe des Icon verändert wird. Es bekommt also nicht nur weiß sondern mehrere untertöne von dieser Farbe. Das hat zur folge wenn du es transparent darstellen willst es unscharf bzw.. verzehrt dargestellt wird. Du mußt das Bitmap dann halt indizieren. gruss |
Re: weissen Hintergrund eines Icons entfernen
und wie macht man das?
|
Re: weissen Hintergrund eines Icons entfernen
Zitat:
PSP, Photoshop oder was auch immer. Ich an deiner stelle würde das icon aus explorer.exe extrahieren dann als png abspeichern, ein image auf die Form legen und das Bild importieren. dann kannst du dir das einbinden und konvertieren als bitmap sparen. Solltest du mehrere icons benötigen dann legst du dir halt ein Imagestrip an. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz