Wenn die Grafiken nicht allzu groß sind, kann man die auch in eine TImage-Komponente laden und die einzelnen Bilder dort aus dem MultiResBitmap dann dem Viewer einfach zur Laufzeit zuweisen (ab Delphi XE8 könnte man das auch einfacher mit einer TImagelist machen).
Man muss aber darauf achten, dass man im MultiResBitmap-Dialog die Option ("Größe nach Bild") wählt, bevor man die einzelnen Bilder hinzufügt (z.B. per Drag&Drop auf neu hinzugefügte Images vom Explorer aus) sonst werden die Grafiken auf die tatsächliche Skalierungsgröße vergrößert und mit entsprechendem Volumen in der Komponente abgelegt (siehe anliegenden Screenshot). Der in der MultiResBitmap eingestellte Skalierungsfaktor hat dann keine Auswirkung auf das Assignment, es werden also die originalen Ausmaße der Bilder verwendet.
Die Variante hat den Vorteil, dass man sich nicht mit den einzelnen Images rumschlagen und sich nicht überlegen muss, wie und wohin die auf dem mobilen Gerät müssen und wie man die dann wieder von dort zur Laufzeit laden kann. Und außerdem geht es deutlich schneller, als wenn man zur Laufzeit die Bilder erst noch laden muss.
Anliegend ein XE5-Projekt, welches das mal auf ganz einfache Weise demonstriert (ImageViewer, in dem man durch Betätigen des Vor oder Zurück-Schalters ein anderes Bild laden kann (insgesamt 7).
Wie gesagt, das macht nur Sinn, wenn die Bilder nicht allzu groß sind (sonst unverhältnismäßiger Speicherverbrauch). Im Demo sind es 7 mal 30 kB JPegs, die machen die Projekt.exe um ca. 400 kb größer.
Hier der Source des Programms:
Delphi-Quellcode:
procedure TForm2.bnNextClick(Sender: TObject);
begin
if iv.Tag< Image1.MultiResBitmap.Count-1 then begin
iv.Tag := iv.Tag+1;
iv.Bitmap.Assign(Image1.MultiResBitmap.items[iv.tag].bitmap);
iv.RealignContent;
end;
end;
procedure TForm2.bnPrevClick(Sender: TObject);
begin
if iv.Tag > 0 then begin
iv.Tag := iv.Tag-1;
iv.Bitmap.Assign(Image1.MultiResBitmap.items[iv.tag].bitmap);
iv.RealignContent;
end;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
iv.Bitmap.Assign(Image1.MultiResBitmap.items[0].bitmap);
iv.RealignContent;
end;
Wenn die Bilder größer sind als die Abmaße des ImageViewers kann man die Bilder bei Bedarf mit einem
iv.bestfit;
in die Anzeigegröße einpassen.