Problem writing images when GUI and Figure are open at the same time
    7 ビュー (過去 30 日間)
  
       古いコメントを表示
    
Hi everyone,
i'm having a little trouble writing images.
I have a GUI which runs some analyzes on images. At some point i want to plot some markers into an image and save it afterwards. The code for this goes like this:
 figure_handle = figure;
 set(figure_handle,'Visible','off');
        if(cboxchecked(handles.mergecbox))
            try
                imshow(handles.mergedimg);
                title(['# cells:  ', numberOfCells]);
                hold on
                plot(centroidCoordinates(:,1), centroidCoordinates(:,2), ...
                    'go','MarkerSize',7,...
                    'MarkerEdgeColor','b',...
                    'LineWidth',2,...
                    'MarkerFaceColor','g');
            catch
                warning('No merged image available');
            end
         end
saveas(figure_handle,[savingName],'png')
So i actually don't want the figure to pop up, so i set the visibility off. But when i do, the plot and title won't be in the figure that i am saving afterwards. If i switch the visibility on i don't have this problem but still i got some issues. I only get the results i want if i slowly step through the code and make sure the figure is always in the foreground. But when i simply run it, my GUI (with the original image that was uploaded) will normally be displayed in the foreground and then the plot will only appear in the GUI. Is there something i can do to fix this? Thanks a lot!
4 件のコメント
採用された回答
  OCDER
      
 2018 年 9 月 14 日
        Always specify which axes you are drawing to. Also, use print instead of saveas to get the desired resolution.
figure_handle = figure;
axes_handle = axes; %<=== track the axes handle
set(figure_handle,'Visible','off');
if(cboxchecked(handles.mergecbox))
    try
        imshow(handles.mergedimg, 'parent', axes_handle); %<==== specify axes handle to use
        title(['# cells:  ', numberOfCells]);
        hold on
        plot(axes_handle, centroidCoordinates(:,1), centroidCoordinates(:,2), ...  %<=== specify axes 
            'go','MarkerSize',7,...
            'MarkerEdgeColor','b',...
            'LineWidth',2,...
            'MarkerFaceColor','g');
        drawnow(); %<=== refresh image
    catch
        warning('No merged image available');
    end
end
%Make sure to setup the figure PaperPosition, Position, etc
print(figure_handle, sprintf('%s.png', savingName), '-dpng', '-r600')
2 件のコメント
  Walter Roberson
      
      
 2018 年 9 月 15 日
				I would go further to
figure_handle = figure;
axes_handle = axes('Parent', figure_handle); %<=== track the axes handle
set(figure_handle,'Visible','off');
if(cboxchecked(handles.mergecbox))
    try
        imshow(handles.mergedimg, 'parent', axes_handle); %<==== specify axes handle to use
        title(axes_handle, ['# cells:  ', numberOfCells]);
        hold(axes_handle, 'on')
        plot(axes_handle, centroidCoordinates(:,1), centroidCoordinates(:,2), ...  %<=== specify axes 
            'go','MarkerSize',7,...
            'MarkerEdgeColor','b',...
            'LineWidth',2,...
            'MarkerFaceColor','g');
        drawnow(); %<=== refresh image
    catch
        warning('No merged image available');
    end
end
%Make sure to setup the figure PaperPosition, Position, etc
print(figure_handle, sprintf('%s.png', savingName), '-dpng', '-r600')
その他の回答 (0 件)
参考
カテゴリ
				Help Center および File Exchange で Interactive Control and Callbacks についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



