Einzelnen Beitrag anzeigen

Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#25

AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?

  Alt 2. Nov 2015, 22:08
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.
Miniaturansicht angehängter Grafiken
demo.jpg   multires.jpg  
Angehängte Dateien
Dateityp: zip Loadimages.zip (464,6 KB, 12x aufgerufen)

Geändert von Harry Stahl ( 2. Nov 2015 um 22:19 Uhr)
  Mit Zitat antworten Zitat