Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Prism Alphablending und die ImageList (https://www.delphipraxis.net/89845-alphablending-und-die-imagelist.html)

Alexander 6. Apr 2007 19:11


Alphablending und die ImageList
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo :)
ich habe u.a. PNG's (48x48 Pixel groß) in eine ImageList geladen und diese anschließend auf Depth32Bit gestellt.
Betrachte ich nun diese Bilder zur Laufzeit, sind sie leider wie im Anhang sehr pixelig an den Rändern, da offensichtlich der Alpha-Channel nicht richtig unterstützt wird.

Kann man das beheben? In einer PictureBox klappt es.

Danke :)

Daniel 6. Apr 2007 19:44

Re: Alphablending und die ImageList
 
Du musst der Imagelist nur beibringen, dass sie Alpha-Kanäle verkraften soll. Code-Fetzen, den ich aus dem Usenet habe:


Delphi-Quellcode:
type
  TILConvertColorType = ( 
    cctColor8, // ICL_COLOR8 
    cctColor16, // ICL_COLOR16 
    cctColor24, // ICL_COLOR24 
    cctColor32 // ICL_COLOR32 
  );


procedure ILConvertColor (ImageList : TImageList;
  const ColorType : TILConvertColorType);
var
  IL : TImageList;
  Flags : LongWord;
begin
  Flags := ILC_MASK;


  case ColorType of
    cctColor8 : Flags := Flags or ILC_COLOR8;
    cctColor16 : Flags := Flags or ILC_COLOR16;
    cctColor24 : Flags := Flags or ILC_COLOR24;
    cctColor32 : Flags := Flags or ILC_COLOR32;
  end;


  IL := TImageList.Create(nil);
  try
    IL.Assign(ImageList);


    with ImageList do
      Handle := ImageList_Create(Width, Height, Flags, Count, AllocBy);


    ImageList.Assign(IL);
  finally
    IL.Free;
  end;
end;

Verwendung: Zur Designzeit ganz normal die Bilder in die Liste einfügen, dann zur Laufzeit die Liste einmal mit obiger Funktion konvertieren.

xaromz 6. Apr 2007 20:06

Re: Alphablending und die ImageList
 
Hallo,

@Daniel: hier geht's doch um .Net.

Gruß
xaromz

Alexander 7. Apr 2007 07:49

Re: Alphablending und die ImageList
 
Danke Daniel, aber wie xaromz schon geschrieben habe, suche ich etwas ähnliches für .NET.
Wobei die Farbtiefe - wie gesagt - schon auf 32Bit steht :? .

Alexander 13. Apr 2007 10:01

Re: Alphablending und die ImageList
 
Sollte es dafür wirklich keine Lösung geben?

Alexander 9. Sep 2007 13:42

Re: Alphablending und die ImageList
 
Da mich das Problem noch immer sehr stört, hole ich es noch mal hervor :).

DGL-luke 9. Sep 2007 13:48

Re: Alphablending und die ImageList
 
hilft dir das vielleicht?
http://www.codeproject.com/cs/miscct...eImagelist.asp

EDIT: wenn du das benutzt musst dus natürlich zu D.Net umschreiben.

EDIT: EIn anderer Lösungsansatz wird hier vorgeschlagen, nämlich die CommonControls Version 6 zu verwenden. Die sollen das anschienend von sich aus können: http://www.codeproject.com/cs/miscct...23#xx1343223xx

Alexander 9. Sep 2007 15:57

Re: Alphablending und die ImageList
 
Vielen Dank :).

Also die Lösung mit der Manifest-Datei scheint leider nicht zu klappen.
Ich nehme zumindest mal an, dass es reicht, die Datei mit dem richtigen Namen ins App-Verzeichnis zu legen.

Die andere Lösung werde ich mir nachher mal genauer anschauen, wenn mir meine Account-Daten von CodeProject wieder eingefallen sind :mrgreen:. Auf dem ersten Blick sieht es aber so aus, als ob die Lösung nur zur Laufzeit arbeitet.

cruiser 9. Sep 2007 16:12

Re: Alphablending und die ImageList
 
Das ist ein grundlegendes .NET Problem. in C# bin ich dazu übergegangen die PNG's in die Resourcen zu packen und von da aus via Ownerdraw auf die Controls zu zeichnen. Nicht elegant, aber der vermutlich einfachste Weg. Welches png ich brauch hab ich dafür jeweils im Tag festgelegt.

Inwieweit das Brauchbar auf Delphi.NET umsetzbar ist, weiss ich aber nicht.

Alexander 9. Sep 2007 16:34

Re: Alphablending und die ImageList
 
Die Lösung mit der Manifest Datei kann eigentlich gar nicht mein Problem lösen, denn durch die Verwendung der Visual Styles und dem anschließenden Aufruf von doEvents führt dazu, dass die CommonControls Version 6 sowieso verwendet wird.

Interessanter Weise haben die Bilder keine Fehler, wenn ich sie direkt in eine PictureBox lade (also auf die ImageList verzichte...).

Da ich das insbesondere für ein eigenes Control brauche (bei den anderen kleineren Icons sieht man es eh kaum), kann ich eigentlich auch auf die ImageList verzichten und mit Ressourcen arbeiten. Nur wie füge ich die geschickt mit Delphi hinzu?
Beim VS ist das ja recht einfach.
Bei Delphi habe ich bisher gar keine Möglichkeit gefunden, die Ressourcen direkt aus der IDE zu bearbeiten (Liegt wahrscheinlich auch daran, dass ich vorwiegend VS nutze :P).


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz