WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

GUIDE - anderes Bild onclick

 

lulu2010
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2010, 09:01     Titel: GUIDE - anderes Bild onclick
  Antworten mit Zitat      
Hallo zusammen,

ich möchte einen Bereich in meiner GUI haben, in dem ein Bild angezeigt wird. Bei einen Klick (z.B. auf einem Button) soll sich das Bild ändern bzw. ein anderes Bild angezeigt werden.

Hat jemand Ideen, wie ich das anstellen kann?

Mit axes funktioniert es nicht, weil man da ja nur direkt plotten kann. Bei mir liegen die Plots jedoch schon als .fig vor.

Danke vorab!
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.07.2010, 09:47     Titel:
  Antworten mit Zitat      
Hallo Lulu,

Die Idee ein AXES Objekt zur Darstellung zu verweden ist gut.

Plots, die als FIG file vorliegen, sind ausgesprochen unpraktisch. Ein FIG-Objekt kannst Du nicht direkt in eine FIGURE (die ja ein weiteres FIG Objekt ist) einbetten.

Wenn es aber nun nicht möglich ist, die Bilder in einem praktischeren Format abzuspeichern, kannst die Plots ja aus den FIG Files extrahieren:
Code:

DisplayFigH = figure('Name', 'Hier werden die Bilder gezeigt');
H = openfig(FigFileName);
AxesH = findobj(allchild(H), 'flat', 'Type', 'axes');
NewAxisH = copyobj(AxesH, DisplayFigH);

Jetzt kannst Du noch die Position etc von NewAxisH anpassen und eventuell eine vorher angezeigte Axes löschen.

Nach der gleichen Method könntest Du auch alle geplotteten Objekte der Axes aus dem FIG File in eine Axes in Deiner GUI kopieren (auch mit COPYOBJ).

Viel Erfolg, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
lulu2010
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2010, 08:22     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für deine Antwort.
Ich kann die Plots auch in einem anderen Format abspeichern. Kannst du mir sagen, welches Format dafür geeignet ist und wie ich es am einfachsten machen kann?

Danke und Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.07.2010, 09:08     Titel:
  Antworten mit Zitat      
Hallo Lulu,

das kommt ganz auf die Plots an. Wenn Du sie wie Fotos handhaben möchtest, wäre JPEG oder PNG hilfreich. Damit werden die einzelnen Pixel-Werte abgespeichert. Solche Bilder lassen sich gut mit IMREAD lesen und mit IMAGE in einer AXES darstellen.

Wenn Du aber die Grafik hinterher noch skalieren möchtest, die Limits ändern oder ähnliches, wäre das FIG Format besser, obwohl man die Daten etwas kompliziert (wie oben angegeben) auslesen muss.

Ich vermute am einfachsten wäre es, die Daten abzuspeichern, und nicht die fertigen Diagramme/Bilder. Dann würden die Bilder jeweils neu gezeichnet werden.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
lulu2010
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2010, 09:57     Titel:
  Antworten mit Zitat      
Die Bilder liegen als .png vor, aber wie kriege ich das jetzt in die axes rein?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.07.2010, 10:05     Titel:
  Antworten mit Zitat      
Hallo Lulu,

Code:
[RGB, M] = imread(FileName);
if ~isempty(M)  % Care for indexed or true-color PNGs:
   RGB = ind2rgb(RGB, M);
end
AxesH = axes;
image(RGB, 'Parent', AxesH);

Ich hoffe, das hilft.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
lulu2010
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2010, 10:14     Titel:
  Antworten mit Zitat      
das hat prima funktioniert!

jetzt habe ich nur noch das Problem, dass die Bilder aufgrund des PNG-Formats pixelig dargestellt werden. Kann ich saveas, imload bzw. image auch für PDFs verwenden?
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.07.2010, 10:20     Titel:
  Antworten mit Zitat      
Hallo Lulu,
Matlab kann (zumindest bis 2009a, spätere Versionen habe ich nicht) nicht ohne weiteres PDFs laden.
Du könntest natürlich ein Active-X-Frame in Dein Fenster legen, welches direkt von Acrobat-Reader gefüllt wird:
Code:
FigH = figure;
h = actxcontrol('AcroPDF.PDF.1', [10, 10, 400, 400], FigH);
h.LoadFile(FileName);
h.setZoom(100);

Das ist aber vielleicht foch etwas überdimensioniert.

Wenn das Bild unpixelig sein soll, könntest Du es mit der von mir bereits geposteten Version versuchen, die die Daten von einem FIG-File kopiert. Klappt das?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
lulu2010
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.07.2010, 12:04     Titel:
  Antworten mit Zitat      
Ich habe deinen ersten Vorschlag ausprobiert, aber das Bild wird dadurch in einem neuen Fenster angezeigt. Ich möchte es aber in der axes eines bereits existierenden Fenster anzeigen lassen.
Private Nachricht senden Benutzer-Profile anzeigen
 
lulu2010
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2010, 15:18     Titel:
  Antworten mit Zitat      
Hallo,

sorry, aber ich muss das Thema nochmal aufgreifen, weil ich es bisher leider nicht hinbekommen habe, die Bilder vernünftig innerhalb einer existieren GUI bzw. fig anzuzeigen.

Also momentan binde ich das Bild folgendermaßen ein:
Code:

[RGB, M] = imread('Bild.png');
AxesH = Main.main_axes;
image(RGB, 'Parent', AxesH);
 

Hierbei ist das Problem, dass das Bild sehr pixelig dargestellt wird, und kaum etwas zu erkennen ist.
Gibt es weitere Möglichkeiten ein Bild (.fig, .eps oder .pdf) in eine Axes bzw. einer existierenden GUI einzubinden?

Bin für jeden Vorschlag dankbar!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.