Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bitmap von ImageList laden ? (https://www.delphipraxis.net/128293-bitmap-von-imagelist-laden.html)

thomas2009 27. Jan 2009 15:33


Bitmap von ImageList laden ?
 
Hallo

ich habe 3 Bitmaps in ImageList1 und möchte ein Bitmap von Listimage in image1 laden

Garfield 27. Jan 2009 18:40

Re: Bitmap von ImageList laden ?
 
Bild Index 0 der Imagelist in das Image laden:
Delphi-Quellcode:
ImageList1.GetBitmap(0, Image1.Picture.Bitmap);

thomas2009 29. Jan 2009 10:33

Re: Bitmap von ImageList laden ?
 
es ging. Danke!

Jens Hartmann 16. Dez 2009 22:40

Re: Bitmap von ImageList laden ?
 
Hallo zusammen,

ich bin durch suchen auf diesen Beitrag gestossen. Diese Funktion würde ich gerne in meinem Starter mit einfügen. Ich habe ein kleines Prog geschrieben, welches in die Autostart integriert wird, und über welches mein eigendliches Programm gestartet wird. Dieses Programm habe ich geschrieben, um eventuelle Verzögerungen beim Windows Start zu überwinden. Jetzt habe ich mir überlegt, das es ja die optimale Möglichkeit wäre in diesen 30 Sekunden ein bißchen Werbung über unser Unternehmen in diesen Starter zu integrieren. Soll heißen ich möchte in 30 Sekunden 50 verschiede Werdenbanner in der Größe 75x900 Pixel als Bitmap auf die Starterform legen. Diese Sollen dann nach jeweils 5 Sekunden geändert werden.

Kennt man ja aus verschiedenen Installationsprogrammen. Leider stürzt mein Delphi schon beim einfügen der Bitmap in meine ImageList ab. Sobalt ich auf kompilieren oder Speichern gehe. Geht gar nichts mehr.

Ich vermute, das es mit der Bild Größe und dem entsprechenden Speicherbedarf zutun hat. Kann mir vieleicht jemand sagen, wie ich das Problem lösen kann, oder wo das Problem liegt. :gruebel:

Danke Gruß

Jens

Garfield 17. Dez 2009 09:55

Re: Bitmap von ImageList laden ?
 
Es liegt tatsächlich an der Größe des Bildes. Es darf nur 256 Pixel breit sein. In der Höhe besteht diese Begrenzung nicht.

Jens Hartmann 17. Dez 2009 21:47

Re: Bitmap von ImageList laden ?
 
Gibt es denn da was, womit ich Bilder in der Größe 150(h)x900(b) verarbeiten kann. Ingesamt 10 Stck.

Danke und Gruß Jens

Namenloser 17. Dez 2009 21:51

Re: Bitmap von ImageList laden ?
 
Ich würde die Bilder einfach als Hier im Forum suchenRessource einbinden. Dadurch spart man sich außerdem den Overhead, der durch die Hexadezimal-Kodierung in der Formular-Datei entsteht.

Garfield 18. Dez 2009 07:34

Re: Bitmap von ImageList laden ?
 
Ich habe größere Bilder auch als Ressource eingebunden. Hat ausserdem den Vorteil, dass es keine Bitmaps sein müssen.

Bernhard Geyer 18. Dez 2009 08:31

Re: Bitmap von ImageList laden ?
 
Zitat:

Zitat von Jens Hartmann
Gibt es denn da was, womit ich Bilder in der Größe 150(h)x900(b) verarbeiten kann. Ingesamt 10 Stck.

Danke und Gruß Jens

Bei LMD gibt's ne Imagelist die auf PNG-Basis arbeitet. Dort müssten größere Images möglich sein da hier nicht auf WinAPI-Beschränkungen rücksicht genommen werden muss.

Sherlock 18. Dez 2009 09:15

Re: Bitmap von ImageList laden ?
 
Ausserdem kann die LMDListe Bilder komprimieren, wenn sie dann doch nur als BMPs vorliegen. Und von einem "Hexadezimal"Overhead höre ich im Zusammenhang mit ImageListen zum ersten mal :D

Sherlock

Bernhard Geyer 18. Dez 2009 09:47

Re: Bitmap von ImageList laden ?
 
Zitat:

Zitat von Sherlock
Und von einem "Hexadezimal"Overhead höre ich im Zusammenhang mit ImageListen zum ersten mal :D

Dürfte eigentlich nur in den DFM's vorliegen wenn diese im Textformat gespeichert werden.

Namenloser 18. Dez 2009 12:20

Re: Bitmap von ImageList laden ?
 
Zitat:

Zitat von Bernhard Geyer
Dürfte eigentlich nur in den DFM's vorliegen wenn diese im Textformat gespeichert werden.

Klar, aber zumindest bei neueren Delphis ist das standardmäßig ja der Fall.

Jens Hartmann 23. Dez 2009 18:06

Re: Bitmap von ImageList laden ?
 
Hallo zusammen,

und besten dank schon mal für die Info´s. Ich habe mein Problem jetzt mit einer Resourcendatei und einer Graphics32 Komponentensammlung über die Komponente Image32 gelößt. Auf diese Komponente bin durch die Suchmaschine gekommen, da ich die Bilder gerne überblenden würde.

Ich habe mir verschiedene Beiträge angesehen, jedoch keinen der mir so richtig helfen konnte.

Ich zeig Euch hier mal meine aktuelle Lösung und hoffe, das ihr mir nochmal weiterhelfen könt.

Delphi-Quellcode:
procedure TPSStarter.FormCreate(Sender: TObject);
var
  Live : TBitmap32;
begin
  PicTimer.Interval := Starter.Interval div 11;
  Live := TBitmap32.Create;
  Live.LoadFromResourceName(HInstance, 'Erfolg');
  Image321.Bitmap := Live;
  Live.Free;
end;

procedure TPSStarter.PicTimerTimer(Sender: TObject);
var
  Live : TBitmap32;
  i : integer;
begin
try
  try
    Live := TBitmap32.Create;
    case Image321.Tag of
      0: Live.LoadFromResourceName(HInstance, 'Einbruch');
      1: Live.LoadFromResourceName(HInstance, 'Brand');
      2: Live.LoadFromResourceName(HInstance, 'TK');
      3: Live.LoadFromResourceName(HInstance, 'IT');
      4: Live.LoadFromResourceName(HInstance, 'Kosten');
      5: Live.LoadFromResourceName(HInstance, 'Lichtruf');
      6: Live.LoadFromResourceName(HInstance, 'Video');
      7: Live.LoadFromResourceName(HInstance, 'Zeit');
      8: Live.LoadFromResourceName(HInstance, 'Zutritt');
      9: Live.LoadFromResourceName(HInstance, 'Planung');
     10: Live.LoadFromResourceName(HInstance,'Erfolg');
    end;
    Image321.Bitmap := Live;
  except
    Exit;
  end;
  finally
    Live.Free;
    Image321.Tag := Image321.Tag + 1;
  end;
end;
Danke schon mal

Gruß Jens

Jens Hartmann 24. Dez 2009 12:42

Re: Bitmap von ImageList laden ?
 
Hallo zusammen,

hat keiner eine Idee.

Gruß Jens

Klaus01 24. Dez 2009 13:54

Re: Bitmap von ImageList laden ?
 
Delphi-Quellcode:
try
  try
    Live := TBitmap32.Create;
    case Image321.Tag of
      0: Live.LoadFromResourceName(HInstance, 'Einbruch');
      1: Live.LoadFromResourceName(HInstance, 'Brand');
      2: Live.LoadFromResourceName(HInstance, 'TK');
      3: Live.LoadFromResourceName(HInstance, 'IT');
      4: Live.LoadFromResourceName(HInstance, 'Kosten');
      5: Live.LoadFromResourceName(HInstance, 'Lichtruf');
      6: Live.LoadFromResourceName(HInstance, 'Video');
      7: Live.LoadFromResourceName(HInstance, 'Zeit');
      8: Live.LoadFromResourceName(HInstance, 'Zutritt');
      9: Live.LoadFromResourceName(HInstance, 'Planung');
     10: Live.LoadFromResourceName(HInstance,'Erfolg');
    end;
    //Image321.Bitmap := Live; // Adresse zugewiesen
    Image321.Bitmap.assign(Live); // versuche es mal mit Inhalt zuweisen
  except
    Exit;
  end;
  finally
    Live.Free;             // freigegeben
    Image321.Tag := Image321.Tag + 1;
  end;
end;
Grüße und schöne Festtage
Klaus

Jens Hartmann 24. Dez 2009 14:45

Re: Bitmap von ImageList laden ?
 
Hallo Klaus,

ändert leider nichts an der Funktion. Die Bilder werden ja sauber und nacheinander geladenund auch zur Anzeige gebracht. Leider werden diese nicht sauber überblendet.

Soll heißen, das umschalten ist halt Ruckartig und sieht somit bescheiden aus.

Ich denke das die ganze Sache irgendwie mit

Delphi-Quellcode:

Image32.Bitmap.MasterAlpha

//und

Image32.Bitmap.DrawMode
funktionieren könnte. Bekomme das allerdings irgendwie nicht hin.

Viele grüße und schöne Festtage

Jens

Garfield 24. Dez 2009 20:09

Re: Bitmap von ImageList laden ?
 
Vielleicht sollte man zwei Bilder übereinanderlegen und beim Überblenden das eine ein- und das andere ausblenden?

Jens Hartmann 24. Dez 2009 20:43

Re: Bitmap von ImageList laden ?
 
Hallo Garfield,

da habe ich auch schon dran gedacht, allerdings bekomme ich momentan noch nicht mal das einblenden hin.

Ich könnte mir vorstellen, das ich den...

Delphi-Quellcode:
Image32.Bitmap.MasterAlpha := 0;

//über eine Schleife z.B. auf 255 hochzählen muss.

    for I := 0 to 254 do
      begin
        Image321.Bitmap.MasterAlpha := Image321.Bitmap.MasterAlpha +1;
      end;
Aber leider funktioniert das nicht.

Gruß Jens

Namenloser 24. Dez 2009 21:58

Re: Bitmap von ImageList laden ?
 
1. Das Image32 selbst ist opaque, lediglich das darin enthaltene Bild lässt sich gegen eine feste Hintergrundfarbe blenden. Hier wirst du wohl direkt auf das Bitmap zeichnen müssen (TBitmap32.Draw()...).
2. Deine Schleife läuft so schnell durch, dass du nichts davon mitbekommen wirst - GR32 arbeitet recht schnell. Bau hier mal eine Hier im Forum suchenDelay-Funktion ein.
3. Du gibst deiner Application nirgends die Chance Messages abzuarbeiten. Delphi-Referenz durchsuchenApplication.ProcessMessages ist dein Freund.

Garfield 26. Dez 2009 21:02

Re: Bitmap von ImageList laden ?
 
http://sourceforge.net/project/scree...985&ssid=28538

Vielleicht ist das was. Beispiele sind ja dabei.

Jens Hartmann 27. Dez 2009 00:06

Re: Bitmap von ImageList laden ?
 
Zitat:

Zitat von Garfield
Vielleicht ist das was. Beispiele sind ja dabei.

Hallo Garfield,

du hast recht, aber leider ist die Kompo genau mein Problem. Mit dieser Kompo schlag ich mich seid Tagen rum ohne Erfolg. Die Kompo ist gut, kann viel, aber das überblenden gelingt mir einfach nicht.

Gruß Jens.

Garfield 27. Dez 2009 14:53

Re: Bitmap von ImageList laden ?
 
In der Delphi-Ecke von DBR gibt es auch ein fade in und fade out. Das erste dürfte wohl das richtige sein. Funktioniert zumindest unter D7PE ganz gut.


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