Grafik aus Datei laden

Forum für alles rund um die MSEide und MSEgui
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Grafik aus Datei laden

Beitrag von fliegermichl »

Manchmal scheitere ich an den einfachsten Sachen. Ich habe eine timage Komponente in meinem Formular und möchte in dieses eine Grafik aus dem Dateisystem laden.
Klappt einfach nicht.
img.bitmap.loadfromfile('pult.bmp') liefert mir nur eine Exception "Graphic format error".

Was mache ich da falsch?

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Grafik aus Datei laden

Beitrag von wp_xyz »

Kann das sein? TImage hat doch gar kein Bitmap. TImage ist nur die sichtbare Hülle, die eigentliche Graphik-Arbeit wird von dessen Picture verrichtet.

So sollte es funktionieren:

Code: Alles auswählen

 img.Picture.LoadFromFile('pult.bmp');

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Grafik aus Datei laden

Beitrag von fliegermichl »

Ja, mit Lazarus wird das genau so gemacht. in der msegui geht es so nicht

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Grafik aus Datei laden

Beitrag von mse »

fliegermichl hat geschrieben:Was mache ich da falsch?

Die benötigten Grafikformat-units müssen in "uses" aufgenommen werden. Um png's zu lesen:

Code: Alles auswählen

 
uses
 mseformatpngread;
 

Die Formatunits sind in lib/common/image/. Für weitere Formate welche fpImage nicht kennt und bessere Performance gibt es auch ein Interface zu GraphicsMagick in lib/common/image/msemagickstream.pas.
Als "einfachste Sache" würde ich das Laden von Bildern nicht bezeichnen. ;-)

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Grafik aus Datei laden

Beitrag von wp_xyz »

fliegermichl hat geschrieben:Ja, mit Lazarus wird das genau so gemacht. in der msegui geht es so nicht

Dann wäre es gut gewesen, wenn man an deiner Frage irgendwie erkennen könnte, dass es um msegui geht.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Grafik aus Datei laden

Beitrag von mse »

wp_xyz hat geschrieben:Dann wäre es gut gewesen, wenn man an deiner Frage irgendwie erkennen könnte, dass es um msegui geht.

Siehe Screenshot.
Dateianhänge
header.png

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Grafik aus Datei laden

Beitrag von wp_xyz »

mse hat geschrieben:
wp_xyz hat geschrieben:Dann wäre es gut gewesen, wenn man an deiner Frage irgendwie erkennen könnte, dass es um msegui geht.

Siehe Screenshot.

Ah, richtig. Das übersehe ich immer.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Grafik aus Datei laden

Beitrag von fliegermichl »

Aja, mal wieder etwas, was man erst mal wissen muss. Das laden der Grafik geht jetzt.
Und schwupp stolpere ich über den nächsten Punkt.

Diese Grafiken sind kleine Vorschaugrafiken von den verschiedenen Dachtypen.
Wenn der Anwender ein Eingabefeld betritt, so soll er als Eingabehilfe kleine Linien sehen, welche ihm anzeigen, welches Mass in dem jeweiligen Eingabefeld vom Programm erwartet wird.

Zu dem Zweck gibt es einen Event editEnter in dem die Prozedur MarkLine mit entsprechenden Parametern aufgerufen wird.

Markline ist so definiert:

Code: Alles auswählen

 
procedure tdachtypeingabefo.MarkLine(fromPoint: Pointty; ToPoint: Pointty;
               aColor: Colorty; aWidth: Integer);
begin
 if not Assigned(img.Bitmap) then exit;
 with img.Bitmap.Canvas do
 begin
  LineWidth := aWidth;
  Color := aColor;
  DrawLine(FromPoint, ToPoint, cl_Blue);
 end;
end;
 


Die Routine wird auch durchlaufen, nur erscheint keine Linie an der entsprechenden Stelle?

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Grafik aus Datei laden

Beitrag von fliegermichl »

Sorry, das Thema hatten wir ja schon einige Threads vorher. Ich kann in dem image.OnPaint Event in den übergebenen aCanvas Parameter zeichnen.

msegui ist halt vollkommen anders aufgebaut als ich das von Delphi oder Lazarus kenne.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Grafik aus Datei laden

Beitrag von mse »

mse hat geschrieben:Die benötigten Grafikformat-units müssen in "uses" aufgenommen werden.

git master ba244f88bb6bab81b5910f84fab69b2a307c78ce zeigt den Fehler "Graphic format not supported." an wenn keine Formate registriert sind.
fliegermichl hat geschrieben:Sorry, das Thema hatten wir ja schon einige Threads vorher. Ich kann in dem image.OnPaint Event in den übergebenen aCanvas Parameter zeichnen.

AFAIK wird zeichnen ausserhalb von "OnPaint" auch für Lazarus nicht empfohlen, auf Mac funktioniert es AFAIK gar nicht. Wenn du in MSEgui einen canvas ausserhalb "OnPaint" benötigst benutze bitte twidget.getcanvas().

Edit1:
Ich sehe du zeichnest in die Bitmap. Dein Code sollte so funktionieren, der Test auf nil von img.Bitmap ist nicht notwendig, das setzen von "Color" ebenfalls nicht.

Edit2:
Was fehlt ist

Code: Alles auswählen

 
 img.bitmap.change();
oder
 img.invalidate();
 

nachdem alle Linien gezeichnet wurden.
Zuletzt geändert von mse am Mi 15. Nov 2017, 13:59, insgesamt 1-mal geändert.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Grafik aus Datei laden

Beitrag von fliegermichl »

Hmm, wenn ich in die Bitmap zeichne, passiert gar nichts. Wenn ich im onPaint Event der Image Komponente in den übergebenen aCanvas zeichne, dann geht es.

Jetzt habe ich aber grad mal ein ganz anderes Problem. In meinem Projekt funktionieren plötzlich keine Breakpoints mehr?!?

Wenn ich ein neues Dummyprojekt erzeuge, dann funktionieren sie. Ich habe die Kommandozeilen des Compileraufrufes verglichen und die sind von den Dateinamen abgesehen identisch.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Grafik aus Datei laden

Beitrag von mse »

fliegermichl hat geschrieben:Hmm, wenn ich in die Bitmap zeichne, passiert gar nichts.

Siehe "Edit2:" oben.
Jetzt habe ich aber grad mal ein ganz anderes Problem. In meinem Projekt funktionieren plötzlich keine Breakpoints mehr?!?

Wenn ich ein neues Dummyprojekt erzeuge, dann funktionieren sie. Ich habe die Kommandozeilen des Compileraufrufes verglichen und die sind von den Dateinamen abgesehen identisch.

Dazu fällt mir nichts gescheites ein. Vielleicht mit 'Project'-'Build' kompilieren, damit alle units neu gemacht werden, vielleicht zuerst auch alle Breakpoints löschen mit 'View'-'Breakpoints'-RightClick-'Delete all'.
Hast du vielleicht einmal 'Project'-'Make 4' ausgeführt? Das kompiliert in den standard Projekttemplates ohne Debuginfos.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Grafik aus Datei laden

Beitrag von fliegermichl »

Ha,

ich wollte deinem Rat gerade folgen und siehe da. View -> Breakpoints -> "Breakpoints on" war aus. Häkchen gesetzt und schon funktionieren sie wieder. Ist schon merkwürdig. In diesem Fenster war ich noch nie drin.
andere Frage. Wäre es ein großer Aufwand, die Menüpunkte aus dem View Menü in die Shortcut Liste zu packen? In Lazarus mach ich Ctrl+Alt+S und sehe den Stack oder Ctrl+Alt+W und schon ist das watchfenster da.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Grafik aus Datei laden

Beitrag von mse »

fliegermichl hat geschrieben:Ha,

ich wollte deinem Rat gerade folgen und siehe da. View -> Breakpoints -> "Breakpoints on" war aus. Häkchen gesetzt und schon funktionieren sie wieder. Ist schon merkwürdig. In diesem Fenster war ich noch nie drin.

Das kann man auch in 'Target'-'Breakpoints on' (Shortcut Ctrl+B) oder in den Debugger speed-buttons einstellen (der rote Punkt).
andere Frage. Wäre es ein großer Aufwand, die Menüpunkte aus dem View Menü in die Shortcut Liste zu packen? In Lazarus mach ich Ctrl+Alt+S und sehe den Stack oder Ctrl+Alt+W und schon ist das watchfenster da.

In MSEide gibt es dazu die Hot-keys "Alt+V S" und "Alt+V W". Ob sich zusätzliche shortcuts lohnen?
Konsequenterweise müsste man dann alle Fenster mit shortcuts ausrüsten. Die Einstellung der MSEide Shortcuts geschieht übrigens in 'Settings'-'Configure MSEide'-'Shortcuts'.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Grafik aus Datei laden

Beitrag von fliegermichl »

Dann habe ich vermutlich versehentlich Ctrl B erwischt.

Nein Alt-V S und Alt-V W reicht auch. Da gewöhnt man sich schon dran.

Antworten