Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Imagelist bild laden problem (https://www.delphipraxis.net/49620-imagelist-bild-laden-problem.html)

rocksoft 13. Jul 2005 21:03


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:
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.
Danke

dahead 14. Jul 2005 10:34

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?

rocksoft 14. Jul 2005 15:19

Re: Imagelist bild laden problem
 
Hallo dahead,

Zitat:

wenn du die Bilder in zur designtime in die imagelist packst wird das mit zwei reihen wohl nicht gehen
hier sagst Du gerade was ich nicht hören wollte :), schade ich dachte es gibt ein trick.

Zitat:

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).
dies wäre eine alternative, ist es aber nicht einfacher 2 Bilder zu laden und muss ich mich nicht um die umrechnung kummern oder ich mach einfach eine lange reihe (<- gibt es ein limit?)


Danke

AndreasP 14. Jul 2005 15:51

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.

rocksoft 14. Jul 2005 21:10

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.

dahead 15. Jul 2005 10:04

Re: Imagelist bild laden problem
 
Zitat:

Zitat von rocksoft
@Dahead hast du eventuell ein paar zeilen code für uns?
Danke.

mhh, leider nicht, aber sollte eigentlich nicht sonderlich aufwendig sein, oder?

rocksoft 17. Jul 2005 08:47

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:
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;
Danke.

SirThornberry 17. Jul 2005 09:06

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.

dahead 17. Jul 2005 10:34

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.

dahead 17. Jul 2005 11:39

Re: Imagelist bild laden problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
@rocksoft:

so, hier:

Delphi-Quellcode:

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;
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:44 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