![]() |
Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Ich möchte mit XE5 und FireMonkeyMobile in einem Rahmen (z.B. ImageViewer1) nacheinander verschiedene .jpgs anzeigen. Mit einem Bitmap, erstellt im Objektinspektor/Bitmap-Editor, ist das für 1 jpg kein Problem.
Der Bitmap-Editor scheint das jpg-Format zu wandeln, denn von Hand eingegeben, führt "imageViewer1.Bitmap:=('Biene.jpg');" zum Kommentar "[DCC Fehler] Unit1.pas(81): E2010 Inkompatible Typen: 'TBitmap' und 'string' ". Ich kenne leider keine Methode, das Bitmap per Text auszutauschen. (Ich glaube, sehr intensiv gesucht zu haben). |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Dein Compiler sagt dir schon das richtige. Du kannst einer Bitmap nur eine Bitmap zuweisen und keinen Dateinamen.
Entweder es gibt eine Funktion .loadfromfile oder du musst anderweitig die Bitmap schon im Speicher haben. |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Zitat:
"OpenDialog" scheint aber nur mit FireMonkey (ohne Mobile) zu funktionieren. Wie kann ich die Bitmap denn separat (ohne image) speichern? Sie taucht nirgends getrennt auf. Ich möchte die "Bilder" am gleichen Ort anzeigen, also in demselben imageViewer. Das geht in VCL problemlos. Wer mag mir ein funktionierendes Miniprogramm schicken? Gut gemeinte Fragmente scheinen mir nicht zu helfen.:-D zeras, bitte nicht böse sein. Vielen Dank im voraus. |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Ich habe mein Logo direkt mit ins Projekt eingebunden und dann lade ich das wie folgt:
Delphi-Quellcode:
var
InStream: TResourceStream; begin InStream := TResourceStream.Create(HInstance, 'Logo', RT_RCDATA); try ImLogo.Bitmap.LoadFromStream(InStream); finally InStream.Free; end; .... |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Zitat:
Kleiner Wink mit dem Zaunpfahl: Wenn ich dir sage: "Hol mir mal das Auto!" was wäre deine spontane Reaktion darauf (abgesehen von "Hols dir doch selber!")? Etwa: "Welches Auto und wo steht das Auto denn?" Genau diese Problem hat
Delphi-Quellcode:
auch, wenn du dem einfach nur
TBitmap.LoadFromFile
Delphi-Quellcode:
gibst. ;)
'Biene.jpg'
|
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
[QUOTE=zeras;1320301]Ich habe mein Logo direkt mit ins Projekt eingebunden und dann lade ich das wie folgt:
Hallo zeras, vielen Dank für die Mühe. Mit TResourceStream begebe ich mich auf unbekanntes Terrain. Mein Compiler meckert aber nicht. Nur mit "Logo" kann er naturgemäß nix anfangen. Ich aber leider auch nicht:|:|. Wie wird denn aus aus der jpg-Datei eine entsprechende Resource? (Dann könnte ich wenigstens an Hand eines Kochrezeptes versuchen den Rest zu verstehen). Einen schönen Abend wünscht Udo |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Zitat:
in der Form anlegen, jedenfalls optisch nicht erkennbar; ganz anders im FireMonkey :-D |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Delphi-Quellcode:
Ja, wenn man nur irgendwie so eine Form anlegen könnte mit so einen OpenDialog drauf, dann könnte man ja sehen, was da so im Prinzip herauskommt (eine komplette Pfadangabe) ... aber das muss wohl erst noch erfunden werden
ImageViewer1.Bitmap.LoadFromFile(
TPath.Combine( TPath.GetHomePath, // oder welcher Pfad auch immer 'Biene.jpg' ) ); |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
|
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Zitat:
und wie bekomme ich "TJpegImage" so in meine procedure "eingebaut", dass es vom Compiler akzeptiert wird? "Picture" gilt auch nicht für FireMonkeyMobile, oder? Es wäre hilfreich, wenn abgeschriebene Programmteile auch auf Realisierungsmöglichkeiten geprüft würden. Natürlich halte ich die Tipps erst einmal für lauffähig und suche verzweifelt die Fehler bei mir. Vieles, was mir unter VCL leicht von der Hand ging, führt leider (für mich) bei FireMonkeyMobile zu reichlich Frust. Selbst mit den Beispielen aus dem Netz klappt nix mit FireMonkeyMobile. Oder sollte dein Vorschlag wirklich lauffähig sein? Gruß Udo |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
[QUOTE=Sir Rufo;1320306]
Delphi-Quellcode:
Hallo Sir Rufo,
ImageViewer1.Bitmap.LoadFromFile(
TPath.Combine( TPath.GetHomePath, // oder welcher Pfad auch immer 'Biene.jpg' ) ); danke für die nette Idee. Mein PC/Compiler akzeptiert nur folgende Zeile:
Delphi-Quellcode:
ImageViewer1.Bitmap.LoadFromFile(System.IOUtils.TPath.Combine(System.IOUtils.TPath.GetHomePath,'boule.jpg' ) );
Wobei ich hoffte, den gewünschten Bildwechsel zu sehen. Ich hatte die jpgs auch in die Bereitstellung geladen. Aber: Pustekuchen. Es bleibt bei der Anzeige des im Objektinspektor / Bitmap-Editor erzeugten "Bildes". Irgendwie erscheint es mir auch logisch. In VCL wurden die jpgs im "Klartext" mit der exe übertragen. Das Prinzip gilt für die Apps nicht, sondern jedes Image bekommt individuell "sein" jpg über den Bitmap-Editor eingebaut. Dahinter scheint ein Umwandlungsprogramm zu stecken. Deshalb kann LoadFromFile kein jpg zum ImageViewer laden. An das neue Bitmap komme ich aber auch nicht isoliert heran, sodass ich auch keine austauschen kann. Bleibt mein Problem, wie ich aus jpg ein Bitmap mache (unter FireMonkeyMobile). |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Zitat:
|
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Ich verstehe nicht das Problem,
in meiner AndroidApp lade ich zum Start alle meine Bildernamen aus dem FotoOrdner in eine ListBox und beim Klick in die ListBox lasse ich mir das Bild in einem anderen Tab als Vorschau anzeigen.Dazu reichen 2 Zeilen.
Delphi-Quellcode:
...und meine KameraBilder sind Jpg's :-D
Image1.Bitmap.LoadFromFile('/storage/emulated/0/DCIM/camera/' + ListBox1.Selected.Text);
TabControl1.TabIndex := 1; |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Zitat:
|
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Ich werwende auch eine ini in der ich die Einstellungen für die App speichere den Pfad hole ich mir zu laden so:
Delphi-Quellcode:
und so könnte er auch den Pfad zu seinen Bildern ermitteln..
IniFileName := System.IOUtils.TPath.GetDocumentsPath +System.SysUtils.PathDelim + 'dcim.ini';
IniFile := TMemIniFile.Create(IniFileName); |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Zitat:
Nicht hinter jeder Frage steht ein fauler und bequemer Anfänger, der sich mit fremden Federn schmücken will. Aber konkrete Tipps wären nett. |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Du kannst mit
Code:
die Datei laden. Und ja, Delphi erkennt, dass es eine JPEG-Datei ist und wandelt sie automatisch in die benötigte Bitmap um.
Image1.Bitmap.LoadFromFile('MeineJpegDateiInklusiveVollständigemPfad.jpg');
Du musst natürlich sicherstellen, dass "MeineJpegDateiInklusiveVollständigemPfad.jpg" auf dem Gerät vorhanden ist. Das kannst du mit
Code:
vorher prüfen.
FileExists('MeineJpegDateiInklusiveVollständigemPfad.jpg') ;
|
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Zitat:
|
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
[QUOTE=mm1256;1320354][QUOTE=Sel2012;1320343][QUOTE=mm1256;1320336]
Zitat:
Ich hatte sehr wohl auf besagten Seiten gegoogelt. Für Delphi mögen die Lösungen ja funktionieren, aber z.B. TPicture" oder - wie schon erwähnt - "TJPEGImage" tauchen immer in den Artikeln auf und sind für mich nicht umzusetzen. Wäre es denn so schlimm oder würde es meinen Ehrgeiz mindern müssen, wenn statt eines weitläufigen Tipps ein konkreter Link genannt würde? Bei dere Fülle der Quellen kann man schon mal was übersehen :pale:. Aber trotzdem: danke. |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Zitat:
Auch Olli73 schlägt
Delphi-Quellcode:
vor.
Image1.Bitmap.LoadFromFile('MeineJpegDateiInklusiveVollständigemPfad.jpg');
Das gibt mir doch zu denken. Deshalb hier meine (nicht funktionierende) Version.
Delphi-Quellcode:
Findet jemand den Fehler?
unit Unit3;
interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.ListBox, FMX.Layouts, FMX.StdCtrls, FMX.Objects, FMX.TabControl; type TForm3 = class(TForm) Image1: TImage; Button1: TButton; ListBox1: TListBox; ListBoxItem1: TListBoxItem; ListBoxItem2: TListBoxItem; ListBoxItem3: TListBoxItem; ListBoxItem4: TListBoxItem; TabControl1: TTabControl; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form3: TForm3; implementation {$R *.fmx} procedure TForm3.Button1Click(Sender: TObject); begin Image1.Bitmap:=TBitmap.create; Image1.Bitmap.LoadFromFile('C:\Users\u\Pictures\Goethe\' + ListBox1.Selected.Text); TabControl1.TabIndex := 1; end; end. |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
google: "fmx load jpg"
-> ![]() 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. -> ![]() But I looked into some FMX sources and searched for "JPEG" and found a code snippet that works. Here it is:
Delphi-Quellcode:
And the JPEG appears! - See more at:
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; ![]() |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
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?! |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
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 |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Liste der Anhänge anzeigen (Anzahl: 2)
Hi Sel2012,
so sollte bei Dir der Testaufbau aussehen.. setzt natürlich voraus das Bild1 und Bild2 tatsächlich in dem Ordner befinden...:-D |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Liste der Anhänge anzeigen (Anzahl: 3)
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:
Wenn die Bilder größer sind als die Abmaße des ImageViewers kann man die Bilder bei Bedarf mit einem
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;
Delphi-Quellcode:
in die Anzeigegröße einpassen.
iv.bestfit;
|
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
Ganz kleinlaut, evetuell viel zu alt, überholt und OT:
Uses JPEG; :oops::oops::oops: |
AW: Mobile: Wie können dem ImageViewer1 verschiedene .jpgs zugewiesen werden?
An alle, die so nett geholfen haben: Ich habe viel gelernt.
DANKE !!! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 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-2025 by Thomas Breitkreuz