![]() |
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 00:38 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