2010-09-21 43 views
8

Khi lưu hình, Matlab sử dụng chức năng nào? Ví dụ: khi người dùng chọn Tệp> Lưu dưới dạng ... và sau đó chọn .png hoặc định dạng hình ảnh khác, điều gì đang diễn ra đằng sau hậu trường?Trong MATLAB, làm cách nào để bạn lưu hình ảnh dưới dạng hình ảnh giống như cách sử dụng "Lưu dưới dạng ..." trong cửa sổ hình?

Tôi hỏi vì tôi đang cố gắng tự động lưu, nhưng khi tôi sử dụng saveas hoặc print, hình ảnh kết quả thực sự được pixelated. Tuy nhiên, hình ảnh trông thực sự tốt khi tôi lưu hình bằng cách sử dụng phương pháp được mô tả ở trên.

Tôi nên sử dụng phương pháp nào để lưu hình của mình khỏi dòng lệnh? Phương pháp thực tế mà cửa sổ con số sử dụng sẽ hoạt động, nhưng nếu các bạn có giải pháp tốt hơn, tôi sẽ giải thích nó!

Trả lời

9

Gọi lại cho mục "Lưu dưới dạng ..." gọi hàm FILEMENUFCN với đối số đầu vào đầu tiên là tay cầm của hình menu nằm trong và đối số đầu vào thứ hai là chuỗi 'FileSaveAs'. Nếu quý vị có tay cầm con số được lưu trữ trong biến hFigure, sau đó các lệnh sau đây sẽ tương đương với nhấn vào nút "Save As ..." mục trình đơn trong cửa sổ đó con số:

>> filemenufcn(hFigure,'FileSaveAs'); 


Một vài lưu ý. ..

  • chức năng FILEMENUFCN chỉ phần tài liệu. Bạn có thể thực hiện help filemenufcn trong cửa sổ lệnh nhưng không có mục nhập nào trong tài liệu trực tuyến. Trong MATLAB 2009a, chức năng có thể được tìm thấy trong các thư mục sau:

    C:\Program Files\MATLAB\R2009a\toolbox\matlab\uitools\filemenufcn.m 
    

    Nhìn qua các mã chức năng, dường như nó cuối cùng gọi một trong hai chức năng SAVEAS cho .fig file hoặc chức năng HGEXPORT (với các đối số đầu vào bổ sung) cho các loại tệp khác.

  • Tôi đã có thể truy tìm cuộc gọi lại cho mục menu "Lưu dưới dạng ..." bằng cách tìm kiếm thông qua các con của cửa sổ hình và các menu của nó. Bạn có thể tự làm điều này bằng cách đặt root property 'ShowHiddenHandles' thành 'on' rồi di chuyển ngang qua 'Children' properties của cửa sổ hình và các menu bằng cách sử dụng lệnh GET. Một cách khác là sử dụng lệnh FINDALL, giả sử bạn biết một số thuộc tính của các đối tượng bạn đang tìm kiếm. Ví dụ: điều này sẽ tìm thấy trình xử lý cho trình đơn "Tệp" cho cửa sổ hình hiện tại:

    >> hFileMenu = findall(gcf,'Label','&File'); 
    

    Và điều này sẽ tìm thấy xử lý cho "Lưu dưới dạng ..."Mục trình đơn và hiển thị callback của nó:

    >> hSaveAs = findall(hFileMenu,'Label','Save &As...'); 
    >> get(hSaveAs,'Callback') 
    ans = 
    filemenufcn(gcbf,'FileSaveAs') 
    
+1

Cảm ơn, bạn đặt cho tôi đi đúng hướng tôi đã kết thúc sử dụng này: http://www.mathworks.com/matlabcentral/newsreader/view_thread/239960 Tùy chọn cài đặt.Format = 'png' Đã lưu nó mà không có nhiều pixelation. – tylerthemiler

+0

@tylerthemiler: Có, có vẻ như chức năng [HGEXPORT] (http://www.mathworks.com/help/techdoc /ref/hgexport.html) cuối cùng được gọi (với một số đối số đầu vào bổ sung như được hiển thị trong chuỗi nhóm tin đó) khi lưu hình ảnh PNG – gnovice

+1

Cảm ơn! QOTSA rocks btw. – tylerthemiler

2

Tôi không biết về bạn, nhưng đối với tôi hình ảnh đã lưu có vẻ đẹp.

Mã dụ:

... create some figure ... 
saveas(gcf, 'some_figure.png'); 

Để thiết lập một người sử dụng quy định sử dụng độ phân giải:

print(gcf,'some_figure','-dpng','-rSOMENUMBER') 

nơi SOMENUMBERis một tham số được sử dụng để giải quyết. Độ phân giải cuối cùng là (SOMENUMBER * 8) x (SOMENUMBER * 6)

Các vấn đề liên quan