![]() |
Imagelist bild laden problem
Liste der Anhänge anzeigen (Anzahl: 4)
Hallo,
ich habe wieder mal ein kleine frage, ich möchte gerne meine Imagelist dynamisch laden, was an sich kein problem ist, mein problem ist wenn das Bild mehreren reihen hat siehe Bild 1b.bmp, bei den Bild 1a.bmp lauft alles so wie es sein sollte. Gibt es dafür eine lossung? oder muss ich das Bild 1b.bmp so zuschneiden das ich daraus zwei Bilder mache und dann einzeln einlese 2a.bmp und 2b.bmp? gleich noch dazu gibt es ein limit, von images in eine reihe?
Delphi-Quellcode:
Danke
procedure TForm1.cxButton2Click(Sender: TObject);
var Bmp: TBitmap; begin Bmp := TBitmap.Create; try Bmp.LoadFromFile('c:\2a.bmp'); ImageList1.AddMasked(Bmp, clFuchsia); Image1.Picture.Assign(bmp); //<- Kontroll Bmp.LoadFromFile('c:\2b.bmp'); Image2.Picture.Assign(bmp); //<- Kontroll ImageList1.AddMasked(Bmp, clFuchsia); finally Bmp.Free; end; end; end. |
Re: Imagelist bild laden problem
Hallöchen,
also, wenn du die Bilder in zur designtime in die imagelist packst wird das mit zwei reihen wohl nicht gehen (hab ich zumindest bisher so beobachtet, kann mich allerdings auch nicht wirklich daran erinnern das mal ausprobiert zu haben). an deiner stelle (falls du das nicht eh schon machst) würde ich das große (zwei-reihige) bild zur laufzeit laden und in 8 kleine unterbilder aufteilen (du hast ja die maße). d. h. du teilst die erste reihe in 4 bilder, die zweite in 4 bilder und diese 8 bilder würde ich in eine imageliste packen (zur laufzeit). hab ich was falsch verstanden? |
Re: Imagelist bild laden problem
Hallo dahead,
Zitat:
Zitat:
Danke |
Re: Imagelist bild laden problem
Mahlzeit,
da ich derzeit auch mit dem dynamischen laden von Imagelisten kämpfe kenne ich dein Problem. Theoretisch akzeptiert Delphi/TImageList "mehrzeilige" Bilder, schließlich erstellter es dir solche wenn du auf exportieren gehst. Allerdings funzt das nur wenn Delphi will, erst hate er meine akzeptiert und nach einer kleinen Änderung nicht mehr. Was jetzt deine Bilder betrifft währe es meiner Meinung nach das Beste du hängst die zweite Zeile hinter die erste so das du 8 Bilder in einer reihe hast. So funzt das zumindest bei mir. |
Re: Imagelist bild laden problem
Hallo,
@AndreasP ja so mach ich es auch zuzeit, nur ist sehr unpraktisch das ganze :( und wenn man 89 gly oder mehr, daher glaube ich, es ist noch nicht so schlecht die idee von Dahead, es sind ein paar zeilen code aber dafür musste es dann sauber sein :) @Dahead hast du eventuell ein paar zeilen code für uns? Danke. |
Re: Imagelist bild laden problem
Zitat:
|
Re: Imagelist bild laden problem
Hallo Dahead,
nein nicht wirklich :) hab schon mal etwas was einigermassen geht, leider habe ich da noch ein fehler und möglichherweise mach ich es komplizierter als es wirklick ist. mit ein Bild 100x100 bzw 4 x 25 x 25 lauft es, aber wenn ich 64x64 benutze a 4 x 16x16 fehlen da einige Bilder. eventuell kann mir jemand helfen :)
Delphi-Quellcode:
Danke.
begin
bitmap := TBitmap.Create; pic := Timage.Create(self); bitmap.LoadFromFile('c:\qqq.bmp'); //100x100 h:=imagelist1.Height; // Bild Hohe 25px y:= bitmap.Width; // Image Breite 100 j:= y div h; // Bilder Y = 4 //c:=1; For c:=0 to j do begin a := rect(0,0,y,h); b := rect(0,h*c,y,h*(c+1)); pic.Canvas.CopyRect(a,bitmap.canvas,b); ImageList1.AddMasked(pic.Picture.Bitmap, clFuchsia); pic.free; bitmap.free; end; end; |
Re: Imagelist bild laden problem
nutzt du die Imagelist nur im Bilder in die Exe zu integrieren und zu Halten oder hast du Komponenten welche die Imagelist nutzen? Wenn du die Imagelist nur zum Halten der Bilder nutzt könntest du diese entweder per ressource einbinden oder dir eine eigene Komponenten schreiben zum halten der Bilder.
|
Re: Imagelist bild laden problem
Hallo,
ich kuck mir deinen code mal an, bin aber gerade erst aufgestanden, kann also noch dauern. aber was mir bisher aufgefallen ist (kann auch gar nix sein): du schreibst: H := Imagelist1.Height; // Bild Hohe 25px aber es sind noch gar keine bilder in der TImageList, oder? Wieso soll H dann (wahrscheinlich) 16 Pixel sein? oder versteh ich da was nicht. nebenbei: normalerweise muss man der TImageList die Maße (Höhe + Breite) vorher mitteilen, also bevor die Bilder reinkommen. Tut man das danach werden evtl. sämtliche Bilder gelöscht. aber wie gesagt, ich kieck mal. |
Re: Imagelist bild laden problem
Liste der Anhänge anzeigen (Anzahl: 1)
@rocksoft:
so, hier:
Delphi-Quellcode:
da ich kein richtiges testbild hatte, hab ich mir selbst eins gemalt, hänge es mal als anhang hier dran, damit du testen kannst ob es bei dir funktioniert. falls nicht könntest du mir mal eines deiner 100x100 px bilder anhängen.procedure TForm1.Button2Click(Sender: TObject); var Bmp: TBitmap; begin Bmp := TBitmap.Create; Bmp.LoadFromFile(GetCurrentDir + '\open.bmp'); SplitImage(bmp, 2, 4); Bmp.Free; end; procedure SplitImage(const aBMP: TBitmap; const Rows, PicsInARow: Integer); var SplitBmp: TBitmap; I, F: Integer; begin SplitBMP := TBitmap.Create; SplitBMP.Height := (aBMP.Height div Rows); SplitBMP.Width := (aBMP.Width div PicsInARow); for I := 0 to PicsInARow - 1 do for F := 0 to Rows - 1 do begin // ShowMessage(Format('Left: %d, Top: %d, Right: %d, Bottom: %d', [I * SplitBMP.Width, F * SplitBMP.Height, SplitBMP.Width * (I + 1), SplitBMP.Height * (F + 1)])); SplitBMP.Canvas.CopyRect ( Rect ( 0, 0, SplitBMP.Width, SplitBMP.Height ), aBMP.Canvas, Rect ( I * SplitBMP.Width, F * SplitBMP.Height, SplitBMP.Width * (I + 1), SplitBMP.Height * (F + 1) ) ); SplitBMP.SaveToFile(GetCurrentDir + '\' + IntToStr(I) + IntToStr(F) + '.bmp'); end; SplitBMP.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 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