Entwickler-Ecke

Multimedia / Grafik - imagelist- bmp skalieren


Sunreader - Mo 14.04.03 11:47
Titel: imagelist- bmp skalieren
Ich habe vor ein Programm zu schreiben welches mit imagelist-en bilder zeichnet welche sich größenmäßig der bildschirmauflösung anpassen.

Erst hab ich versucht die eigenschaften width und height der imagelist zu ändern, das klappt aber nicht, weil dann automatisch die geladenen bilder entfernt werden.
Also hab ich ein weiteres imagelist erstellt mit den benötigeten bildern drin und als width und height die maximal mögliche einstellung (was vielleicht gar nicht wichtig ist, egal;)

Dann ändere ich bei der imagelist, aus welcher nachher wirklich die bilder ausgelsen werden sollen die größeneinstellung und kopiere mit addimages die bilder der dummy- list in die eigentliche.

Durch diesen Umweg hab ich es letztendlich geschafft die Größe der ausgegebenen Bilder zu verändern, das Problem was sich jetzt aber stellt ist, dass sich bei diesen Operationen automatisch die option 'dehnen' der imagelist auf 'zuschneiden' ändert, was dazu folgt, dass wenn ich eine niedrige Bildschirmauflösung wähle, nur ein halbes bitmap angezeigt wird anstatt es zu skalieren. ('dehnen' kann man nicht zur laufzeit aktivieren, so wire ich das sehen)


Falls jemand eine Lösung für mein Problem weiß oder einen von vornerein eleganteren Weg kennt, wäre ich für diese Information dankbar.

Sunreader


Michael Stenzel - Di 15.04.03 00:57

Hi.

Wenn Du die Bilder aus die Liste in eine eigene Bitmap kopierst und sie dann in ein TCanvas anzeigst, dann geht es.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Timer1Timer(Sender: TObject);
var Rect : TRect;         // größe der Anzeigefläche
    Bitmap : TBitmap;
    BildIndex : integer;
begin
     Bitmap := TBitmap.Create;      // Neue Bitmap erstellen
     BildIndex := 0;                       // BildIndex aus Imagelist
     imlBilder.GetBitmap(BildIndex,Bitmap); // Bitmap aus Liste Kopieren
     Rect.Left := 0;                // Zielrechteck bestimmen
     Rect.Top := 0;                 // Hier als Beispiel Form1
     Rect.Right := Form1.Width;
     Rect.Bottom := Form1.Height;
     Form1.Canvas.StretchDraw(Rect,Bitmap); // Bitmap in Ziel kopieren
     Bitmap.FreeImage;             // Bitmap Freigeben.
end;


Viel erfolg
Michael.


Sunreader - Di 15.04.03 09:30

Danke :D