Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi weissen Hintergrund eines Icons entfernen (https://www.delphipraxis.net/112809-weissen-hintergrund-eines-icons-entfernen.html)

Helmi 27. Apr 2008 16:56


weissen Hintergrund eines Icons entfernen
 
Hallo,

hier hab ich einen Code bekommen zum Auslesen des Papierkorb-Icons.

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:
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;
Es funktioniert eigentlich ganz gut. Nur das Icon hat einen weissen Hintergrund.
Leider bekomm ich den nicht weg. Ich hätte gerne das reine Icon.

Dieser Teil:
Delphi-Quellcode:
    with Bitmap do
      begin
        TransparentColor := clWhite;
        Transparent := true;
      end;
brachte leider auch keinen Erfolg.

Wie könnt ich den Hintergrund weg/transparent bekommen?

_frank_ 28. Apr 2008 16:19

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

Helmi 28. Apr 2008 17:34

Re: weissen Hintergrund eines Icons entfernen
 
Hallo,

es handelt sich aber nicht um einen Speedbutton sondern um einen BitBtn

_frank_ 28. Apr 2008 21:41

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:
  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;
bevor es noch jemand probiert...folgendes funtioniert nicht:
Delphi-Quellcode:
  Button.Glyph.Assign(Bitmap);
  button.Glyph.TransparentColor:=button.Glyph.Canvas.Pixels[0,0];
  button.Glyph.Transparent:=true;
ist übrigends bei TSpeedbutton der gleiche Mist...

HTH Frank

Helmi 29. Apr 2008 15:54

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!

EWeiss 29. Apr 2008 16:27

Re: weissen Hintergrund eines Icons entfernen
 
Zitat:

Zitat von Helmi
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!

Sorge doch erstmal dafür das dein Symbol auch eine saubere Hintergrundfarbe hat
und nicht noch pixel anderer Farben (Brush) enthält.

Das Format sollte indiziert sein um solche Probleme zu vermeiden.

gruss Emil

Helmi 29. Apr 2008 16:32

Re: weissen Hintergrund eines Icons entfernen
 
wie meinst das?

EWeiss 29. Apr 2008 17:11

Re: weissen Hintergrund eines Icons entfernen
 
Zitat:

Zitat von Helmi
wie meinst das?

Wenn du das Icon zu einem Bitmap konvertierst bekommt dieses eine andere
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

Helmi 29. Apr 2008 17:14

Re: weissen Hintergrund eines Icons entfernen
 
und wie macht man das?

EWeiss 29. Apr 2008 17:35

Re: weissen Hintergrund eines Icons entfernen
 
Zitat:

Zitat von Helmi
und wie macht man das?

Du hast mehrere möglichkeiten bzw.. programme dafür zur verfügung.
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.
Seite 1 von 2  1 2      

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