2010-12-15 12 views
7

Czy istnieje sposób wydrukowania rysunku w schowku, aby jakość była taka sama, jak w przypadku opcji Edit-->Copy Figure?Jak wydrukować rysunek do schowka za pomocą funkcji PRINT o jakości identycznej z opcją "Edycja -> Kopiuj rysunek"?

Zapisałem liczbę do pliku PowerPoint za pomocą metody saveppt.m, uzyskanej z Matlab Central. To działało dobrze do wczoraj. Zauważyłem, że jakość zapisanego obrazu została w jakiś sposób zdegradowana. Próbowałem ponownie generować slajdy ppt z dokładnie tym samym skryptem i tymi samymi danymi źródłowymi, ale nowe slajdy są po prostu gorszej jakości.

Zbadałem trochę ten problem i odkryłem, że kiedy rysunek jest kopiowany do schowka przez uruchomienie print -dmeta, obraz w schowku jest już zdegradowany, natomiast jeśli użyję opcji Edit-->Copy Figure w oknie rysunku, otrzymam obraz tak wyraźny, jak oryginalny obraz w oknie rysunku.

Poniżej znajduje się przykład w celach informacyjnych. I skopiowany obraz z rysunku do schowka za pomocą dwóch różnych metod i wkleić go do programu graficznego Microsoft i wyciąć kawałek nim pokazać poniżej:

Obraz użyciu print -dmeta: stored figure using "print -dmeta"

obraz, używając Edit-->Copy Figure: stored figure using "Copy Figure"

Jeśli porównać etykietę Xtick „50”, można zobaczyć, że obraz z Edit-->Copy Figure jest gładsza.

Na początku myślałem, że to problem z rozdzielczością, ale ustawienie -rN do zmiany rozdzielczości nie rozwiązuje mojego problemu, przynajmniej nie dla N < = 300.

Dziękuję za pomoc.

Odpowiedz

2

Myślę, że sam znalazłem odpowiedź. Użycie print -dmeta -painters do określenia mechanizmu renderowania rozwiązuje mój problem.

W File-->Preference-->Figure Copy Template-->Copy Option zauważyłem tam są 3 opcje:

  1. Metafile
  2. Zachowaj informacje
  3. bitmapy

stwierdziliśmy, że jeśli wybiorę 1, Edit-->Copy Figure wyprowadza sam obraz jako print -dmeta. Potwierdziłem więc, że potrzebuję informacji w opcji Preserve information. Szybkie wyszukiwanie google doprowadziło mnie do dyskusji na temat potencjalnej różnicy zastosowanego renderera i ostatecznie potwierdziłem, że za pomocą painters wydrukuję obraz do schowka w sposób jaki chciałem.

Obraz w pytaniu wydaje się być generowany przez renderer zbuffer i painters, odpowiednio. Nadal nie wiem, dlaczego domyślny renderer z paint -dmeta zmian, jednak.

6

Krótka odpowiedź ... Użyj sama funkcja wywoływana w wywołania zwrotnego dla tej pozycji menu:

editmenufcn(gcf,'EditCopyFigure'); 


Dłuższa odpowiedź ... Jak dokładnie nie mogę znaleźć to? Możesz spojrzeć na my previous answer na related question about reproducing what is done by a File menu option. Koncepcja jest taka sama, tylko dla innego menu figur. Na przykład, to znaleźć zwrotnego chcesz dla aktualnie aktywnego okna rysunku:

>> 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') 

Funkcja EDITMENUFCN jest jedna z tych słabo udokumentowanych funkcji, ale pominie kodu (wpisując edit editmenufcn.m) pokazuje, że zarówno wywołuje Java (jeśli korzystasz z komputera Mac) lub nieudokumentowaną funkcję UIMENUFCN.

+0

Gah! Właśnie wtedy, gdy miałem przesłać post! +1 dla szybkości. BTW: Matlab ma również funkcję 'clipboard', która niestety jest tylko dla napisów. – Jonas

+0

+1 dla szybkiej naprawy. Jednak będzie świetnie, jeśli uda mi się uzyskać parametr/właściwości, które sprawiają, że 'print -dmeta' jest tak dobry, jak' Edit -> Copy Figure'. W końcu opcja Copy Figure nie jest pod moją kontrolą, a jakość obrazu może zepsuć się pewnego dnia bez powodu, tak jak to, co spotkałem wczoraj. Zmieniłem tytuł mojego pytania, by lepiej odpowiedzieć na moją potrzebę. – YYC

+0

Oto artykuł, który napisałem na ten temat (lub ogólnie, jak używać i modyfikować domyślny pasek narzędzi Matlab i wywołania menuub): http://undocumentedmatlab.com/blog/modifying-default-toolbar-menubar-actions/ –