AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Größe von TBitmap für TImageList anpassen

Ein Thema von Leanahtan · begonnen am 6. Jan 2010 · letzter Beitrag vom 6. Jan 2010
Antwort Antwort
Leanahtan

Registriert seit: 5. Jun 2009
62 Beiträge
 
Turbo Delphi für Win32
 
#1

Größe von TBitmap für TImageList anpassen

  Alt 6. Jan 2010, 01:30
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:
GetImageByIDStr(Image,TGroundTile(TileSet.GTList[i]).Img0);
j:=SmallGroundTilesImageList.AddMasked(Image,clfuchsia);
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?
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Größe von TBitmap für TImageList anpassen

  Alt 6. Jan 2010, 05:21
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..

IcoFx

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
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Leanahtan

Registriert seit: 5. Jun 2009
62 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Größe von TBitmap für TImageList anpassen

  Alt 6. Jan 2010, 11:56
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.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Größe von TBitmap für TImageList anpassen

  Alt 6. Jan 2010, 12:25
Hallo Leanahtan,

schau sonst mal hier..

bmp to ico

Gruß Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Leanahtan

Registriert seit: 5. Jun 2009
62 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Größe von TBitmap für TImageList anpassen

  Alt 6. Jan 2010, 12:51
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).
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Größe von TBitmap für TImageList anpassen

  Alt 6. Jan 2010, 15:16
Hallo,

ich habe mal etwas herumprobiert und das funktioniert bei mir:

Delphi-Quellcode:
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;
Beispielaufruf:

Delphi-Quellcode:
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;
Grüße, Matze

PS: Was wäre eigentlich, wenn man den Codes hier einfach eine Lizenz verpasst, die bei Verwendung eine Open-Source-Anwendung voraussetzt? *g*
  Mit Zitat antworten Zitat
Leanahtan

Registriert seit: 5. Jun 2009
62 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Größe von TBitmap für TImageList anpassen

  Alt 6. Jan 2010, 22:21
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.

  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 Uhr.
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