AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Sel2012 · begonnen am 1. Nov 2015 · letzter Beitrag vom 3. Nov 2015
Antwort Antwort
Seite 3 von 3     123   
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#21

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

  Alt 2. Nov 2015, 16:50
google: "fmx load jpg"

-> http://stackoverflow.com/questions/2...ling-in-delphi
In FireMonkey, graphics are handled using specialized classes derived from FMX.Graphics.TCustomBitmapCodec that are registered with the FMX.Graphics.TBitmapCodecManager class. You use the general-purpose FMX.Graphics.TBitmap class for handling all graphics. When loading a graphic, it uses the appropriate registered codec (if it can find one), but when saving you have to specify the codec you want to use.

FireMonkey uses different codec implementations for each platform, thus there is no single class that you can subclass, like there is in VCL. So, in order to customize JPEG handling in FireMonkey, you will have to create your own TCustomBitmapCodec-derived codec and register it with TBitmapCodecManager (unregistering the existing classes for the .jpg and .jpeg file extensions). Here are the codec classes that FireMonkey currently implements:

Windows: TBitmapCodecWIC in FMX.Canvas.D2D.pas
OSX: TBitmapCodecQuartz in FMX.Canvas.Mac.pas
iOS: TBitmapCodecQuartz in FMX.Canvas.iOS.pas
Android: TBitmapCodecAndroid in FMX.Canvas.Android.pas
Using {$IFDEF} statements, you might be able to utilize those existing classes inside of your custom codec as needed.

-> http://codeverge.com/embarcadero.del...a-jpeg/1085948
But I looked into some FMX sources and searched for "JPEG" and found a code snippet that works. Here it is:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Filter: TBitmapCodec;
  TempBitmap: TBitmap;
begin
  if OpenDialog1.Execute then begin
    TempBitmap := TBitmap.Create(0, 0);
    Filter := DefaultBitmapCodecClass.Create;
    Filter.LoadFromFile(OpenDialog1.FileName, 0, TempBitmap);
    ImageControl1.Bitmap.Assign(TempBitmap);
    Filter.Free;
    TempBitmap.Free;
  end;
end;
And the JPEG appears! - See more at: http://codeverge.com/embarcadero.del....3YuJ46k0.dpuf
  Mit Zitat antworten Zitat
borstenei

Registriert seit: 11. Nov 2011
121 Beiträge
 
#22

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

  Alt 2. Nov 2015, 16:52
Ich habe das mal eben bei mir nachgestellt:
Delphi-Quellcode:
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects,
  FMX.Controls.Presentation, FMX.StdCtrls, FMX.ListBox, FMX.Layouts,
  FMX.TabControl;

type
  TForm1 = class(TForm)
    TabControl1: TTabControl;
    TabItem1: TTabItem;
    TabItem2: TTabItem;
    ListBox1: TListBox;
    ListBoxItem1: TListBoxItem;
    ListBoxItem2: TListBoxItem;
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
begin
   Image1.Bitmap.LoadFromFile('C:\Users\Frank\test\' + ListBox1.Selected.Text);
   TabControl1.TabIndex := 1;
end;

end.

das funzt bei mir auf Anhieb...warum auch nicht?!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#23

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

  Alt 2. Nov 2015, 17:00
Hallo,


Delphi-Quellcode:
// Wozu ist das denn da ?
Image1.Bitmap:=TBitmap.create;
// Was steht in ListBox1.Selected.Text ?
Image1.Bitmap.LoadFromFile('C:\Users\u\Pictures\Goethe\' + ListBox1.Selected.Text);
TabControl1.TabIndex := 1;

Heiko
Heiko
  Mit Zitat antworten Zitat
borstenei

Registriert seit: 11. Nov 2011
121 Beiträge
 
#24

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

  Alt 2. Nov 2015, 17:05
Hi Sel2012,
so sollte bei Dir der Testaufbau aussehen..
setzt natürlich voraus das Bild1 und Bild2 tatsächlich in dem Ordner befinden...
Miniaturansicht angehängter Grafiken
test2.jpg   test1.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

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

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

  Alt 2. Nov 2015, 21: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 21:19 Uhr)
  Mit Zitat antworten Zitat
r.koch
(Gast)

n/a Beiträge
 
#26

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

  Alt 2. Nov 2015, 22:22
Ganz kleinlaut, evetuell viel zu alt, überholt und OT:

Uses JPEG;

  Mit Zitat antworten Zitat
Sel2012

Registriert seit: 6. Jun 2015
Ort: 31535
103 Beiträge
 
Delphi XE5 Professional
 
#27

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

  Alt 3. Nov 2015, 08:09
An alle, die so nett geholfen haben: Ich habe viel gelernt.
DANKE !!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:56 Uhr.
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