![]() |
Größe von TBitmap für TImageList anpassen
Ich lade in einem Tool mehrere Bitmaps aus einem Archiv, und möchte diese anschließend als Icons in einer TListView verwenden. Also hab ich eine entsprechende TImageList angelegt, in die die benötigten Bilder eingefügt werden. Das klappt soweit auch, allerdings sind mir die Bilder etwas zu groß. Jetzt suche ich nach einer möglichst einfachen (und performanten) Methode, die Bilder für die ImageListe zu verkleinern.
Bisher läuft das ganze so ab:
Delphi-Quellcode:
Mit GetImageByIDStr wird das Bild aus einem Archiv geladen, und dem TBitmap Image zugewiesen. Nur wie kann ich das TBitmap jetzt verkleinern, bevor ich es an SmallGroundTilesImageList übergebe?
GetImageByIDStr(Image,TGroundTile(TileSet.GTList[i]).Img0);
j:=SmallGroundTilesImageList.AddMasked(Image,clfuchsia); |
Re: Größe von TBitmap für TImageList anpassen
Hallo Leanahtan,
um eine graphisch gute und hochwertige Grafik in die TListView zu integrieren, ist es vermutlich am besten, wenn Du die Bilder vor dem einfügen in die TImageList mit einem Bildbearbeitungsprogramm auf die entsprechende Größe skalierst. Außerdem, gibt es da so Programme wie.. ![]() womit du z.B. richtige .ico Datein erstellen kannst. Ich weiß nicht ob ich 100% richtig liege, aber du wirst wahrscheinlich um diesen Weg nicht umher kommen. Such mal hier im Forum nach "Icon Bearbeitung" etc. Gruß Jens |
Re: Größe von TBitmap für TImageList anpassen
Hmm, also das ist für mich keine praktikable Lösung. Es handelt sich ja nicht um einige feste Bilder. Vielmehr kann der Nutzer die Bilder selbst importieren, und diese werden dann in einem vorgeschriebenen Format gebraucht. Nur ist dieses etwas zu groß für die Liste - eine Halbierung von Höhe und Breite würde das deutlich übersichtlicher machen. Für TImage gibt es ja z.B. die Strech-Methode. Aber ich habe eigentlich nicht vor, eine überflüssige Komponente anzulegen, nur um damit ein Bild zu verkleinern. Zur größten Not könnte man auch mit Scannline nur jede zweite Zeile (und davon nur jedes zweite Pixel) in ein zweites TBitmap kopieren - lieber wäre mir aber eine richtige Strechmethode.
|
Re: Größe von TBitmap für TImageList anpassen
|
Re: Größe von TBitmap für TImageList anpassen
Vielleicht steh ich ja auf dem Schlauch - aber warum sollte ich das Bitmap in eine TIcon-Variable konvertieren? Die wäre dann doch immernoch genauso groß, und außerdem kann man ein Icon ja noch schlechter in der größe andern, als ein Bitmap.
Vielleicht liegt der Denkfehler auch woanders. Ich brauche die TImagelist nur, um ein Symbol in der Liste anzuzeigen, für alle anderen Anwendungen wird immer die Orginaldatei aus dem Archiv verwendet. Die ImageList wird daher auch nur zur Laufzeit regelmäßig aus Einzelbildern neu aufgebaut (nicht wie sonst vielleicht üblich aus einem einzelnen Bitmap, dass dann in der Liste zerstückelt wird). |
Re: Größe von TBitmap für TImageList anpassen
Hallo,
ich habe mal etwas herumprobiert und das funktioniert bei mir:
Delphi-Quellcode:
Beispielaufruf:
procedure AddBmpToImgList(ImgList: TImageList; SourceBmp: TBitmap; IcoWidth: Integer; IcoHeight: Integer);
var ImgListBmp: TBitmap; begin ImgListBmp := TBitmap.Create; try ImgListBmp.Width := IcoWidth; ImgListBmp.Height := IcoHeight; ImgListBmp.TransparentColor := clFuchsia; ImgListBmp.Transparent := True; ImgListBmp.TransparentMode := tmAuto; // resize bitmap StretchBlt(ImgListBmp.Canvas.Handle, 0, 0, IcoWidth, IcoHeight, SourceBmp.Canvas.Handle, 0, 0, SourceBmp.Width, SourceBmp.Height, SRCCOPY); // add bitmap to the image list ImgList.AddMasked(ImgListBmp, ImgListBmp.TransParentColor); finally FreeAndNil(ImgListBmp); end; end;
Delphi-Quellcode:
Grüße, Matze
procedure TForm1.Button1Click(Sender: TObject);
var Bmp: TBitmap; begin Bmp := TBitmap.Create; try if OpenPictureDialog1.Execute then begin Bmp.LoadFromFile(OpenPictureDialog1.FileName); AddBmpToImgList(ImageList1, Bmp, 16, 16); end; finally FreeAndNil(Bmp); end; end; PS: Was wäre eigentlich, wenn man den Codes hier einfach eine Lizenz verpasst, die bei Verwendung eine Open-Source-Anwendung voraussetzt? *g* |
Re: Größe von TBitmap für TImageList anpassen
Super, vielen Dank. Das ist genau das was ich gesucht habe. Hab die Funktion nur noch um einen Rückgabewert erweitert, und die Parameter IcoWidth und IcoHeight gestrichen. Das zugewiesene Bitmap muss ja sowieso die in der ImageList eingestellten Abmessungen haben - ich verwende daher gleich diese Werte.
:dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:34 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