2010-12-15 6 views
7

Gibt es eine Möglichkeit, die Figur in die Zwischenablage zu drucken, so dass die Qualität identisch mit der Edit-->Copy Figure Option ist?Wie wird die Grafik in die Zwischenablage mit der PRINT-Funktion gedruckt, wobei die Qualität identisch mit der Option "Bearbeiten -> Figur kopieren" ist?

Ich speicherte die Figur in Powerpoint-Datei mit saveppt.m erhalten von Matlab Central. Es hat bis gestern gut funktioniert. Ich bemerkte, dass die gespeicherte Bildqualität irgendwie verschlechtert war. Ich habe versucht, einige PPT-Folien mit genau dem gleichen Skript und den gleichen Quelldaten neu zu generieren, aber die neuen Folien sind einfach von schlechterer Qualität.

ich in dieses Problem untersucht ein wenig und entdeckte, dass, wenn die Zahl von laufenden print -dmeta in die Zwischenablage kopiert wird, wird das Bild in die Zwischenablage bereits abgebaut, während, wenn ich die Edit-->Copy Figure Option in der Figur Fenster verwenden, ich das bekommen Bild so klar wie das Originalbild im Figurenfenster.

Folgendes ist ein Beispiel für Ihre Referenz. Ich kopierte das Bild von einer Figur in die Zwischenablage durch zwei verschiedene Methoden, und es zu Microsoft Paint-Programm einfügen, und schneiden Sie ein Stück davon unter zeigen:

Das Bild mit print -dmeta: stored figure using "print -dmeta"

Das Bild mit Edit-->Copy Figure: stored figure using "Copy Figure"

Wenn Sie das Xtick Label ‚50‘ zu vergleichen, sehen Sie, dass das Bild von Edit-->Copy Figure glatter ist.

Am Anfang dachte ich, es war ein Problem der Auflösung, aber die Einstellung -rN, um die Auflösung zu ändern scheint nicht mein Problem zu lösen, zumindest nicht für N < = 300.

Vielen Dank für Ihre Hilfe.

Antwort

2

Ich glaube, ich habe die Antwort selbst gefunden. Die Verwendung von print -dmeta -painters zur Angabe des Renderers löst mein Problem.

In File-->Preference-->Figure Copy Template-->Copy Option Ich habe bemerkt, gibt es 3 Möglichkeiten:

  1. Metafile
  2. Konserve Informationen
  3. Bitmap

Ich fand, dass, wenn ich 1 wählen, die Edit-->Copy Figure gibt das gleiche Bild wie print -dmeta. Also habe ich bestätigt, dass die Informationen, die ich brauche, in der Preserve information Option sind. Eine schnelle Google-Suche führte mich zu der Diskussion über den möglichen Unterschied des angewandten Renderers, und schließlich bestätigte ich, dass die Verwendung von painters das Bild in der Weise in die Zwischenablage druckt, wie ich es wollte. Das Bild in der Frage scheint vom Renderer zbuffer bzw. painters generiert zu werden. Ich weiß immer noch nicht, warum sich der Standard-Renderer von paint -dmeta ändert.

6

Die kurze Antwort ... Verwenden Sie die gleiche Funktion in der Callback für diesen Menüpunkt aufgerufen:

editmenufcn(gcf,'EditCopyFigure'); 


Die längere Antwort ... Wie genau fand ich Dies? Sie können my previous answer zu einem related question about reproducing what is done by a File menu option betrachten. Das Konzept ist das gleiche, nur für ein anderes Figurenmenü. Zum Beispiel finden diese den Rückruf Sie für die aktuell aktive Figur Fenster wollen:

>> hCopyFigure = findall(gcf,'Label','Copy &Figure'); %# Handle for the "Copy 
                 %# Figure" menu item 
>> get(hCopyFigure,'Callback') %# Callback invoked when that item is selected 

ans = 

editmenufcn(gcbf,'EditCopyFigure') 

Die Funktion EDITMENUFCN ist ein anderes jener dünn Funktionen dokumentiert, aber der Code der Suche durch (von edit editmenufcn.m eingeben) zeigt, dass es entweder ruft Java (wenn Sie auf einem Mac sind) oder die undokumentierte Funktion UIMENUFCN auf.

+0

Gah! Gerade als ich den Beitrag einreichen wollte! +1 für Geschwindigkeit. BTW: Matlab hat auch eine 'Zwischenablage'-Funktion, die leider nur für Strings gedacht ist. – Jonas

+0

+1 für die schnelle Lösung. Es wird jedoch großartig sein, wenn ich den Parameter/die Eigenschaften, die das 'print -dmeta' so gut machen, wie das' Edit -> Copy Figure' abrufen kann. Schließlich habe ich die Option "Figur kopieren" nicht unter meiner Kontrolle, und die Bildqualität könnte irgendwann einmal ohne Grund schlecht werden, genau wie gestern. Ich änderte den Titel meiner Frage, um besser auf meine Bedürfnisse einzugehen. – YYC

+0

Hier ist ein Artikel, den ich über dieses Thema geschrieben habe (oder im Allgemeinen, wie man die standardmäßigen Matlab-Symbolleisten- und Menüleisten-Callbacks verwendet und modifiziert): http://undocumentedematlab.com/blog/modifying-default-toolbar-menubar-actions/ –