打开新图像时,如何在Matlab轴窗口中保留文本对象?
我的程序打开一个图像打开新图像时,如何在Matlab轴窗口中保留文本对象?,matlab,matlab-figure,Matlab,Matlab Figure,我的程序打开一个图像 pic_handle = imshow('pic.bmp'); 然后添加一些文本对象 text(x, y, 'my text'); text(x2, y2, 'more text'); 然后,用户可以选择另一个图像打开,这将导致 imshow('pic2.bmp'); delete(pic_handle); 现在我所有的文字都消失了。在浏览了一下之后,我看到显示列表已被清除,文本对象的句柄似乎无效(不完全确定) 我的问题是,是否有办法保存文本?也就是说,在Axis对象
pic_handle = imshow('pic.bmp');
然后添加一些文本对象
text(x, y, 'my text');
text(x2, y2, 'more text');
然后,用户可以选择另一个图像打开,这将导致
imshow('pic2.bmp');
delete(pic_handle);
现在我所有的文字都消失了。在浏览了一下之后,我看到显示列表已被清除,文本对象的句柄似乎无效(不完全确定)
我的问题是,是否有办法保存文本?也就是说,在Axis对象中打开一个新图像而不吹走显示列表?这里有两个问题:
imshow
删除文本(hold on
修复)uistack
解决:
pic_handle = imshow('pic1.bmp');
h1=text(100, 20, 'my text');
h2=text(20, 100, 'more text');
hold on
imshow('pic2.bmp');
delete(pic_handle);
uistack(h1,'top')
uistack(h2,'top')
AVK可能有一个比我更合适的答案,但无论如何我会发布这个 直接替换存储在图形中的数据是可能的。在图形内存中翻一翻,你可以找到数据存储的位置并替换它。如果图像比原始图像大或小,此代码将不会调整您的体形大小
% read some data
h = imshow('ngc6543a.jpg');
text(20,20, 'my text', 'Color', 'red');
text(20,50, 'more text', 'Color', 'blue');
% get a different image
imdata2 = imread('circuit.tif');
height = size(imdata2,1);
width = size(imdata2,2);
% replace the data in the figure
set(h, 'CData', imdata2);
set(h, 'YData', [1 height]);
set(h, 'XData', [1 width]);
发帖后不久,我就明白了,正如你所说的,“坚持”就行了。有趣的是,新图像没有放置在文本上。不需要uistack命令。我甚至不确定它们是否能在这种情况下工作,因为问题是Axis窗口子窗口的显示顺序。从我在其他帖子中读到的内容来看,处理这个问题的方法是重新排列子数组。这似乎就是
uistack
所做的,重新排列子数组。我快速查看了uistack的源代码,事实上它就是这样做的。但也涉及到一些其他“规则”。正如我在上面的评论中所指出的,新图像不在先前绘制的文本对象之上。事实上,我尝试使用uistack
将图像移动到顶部,但没有效果。因此,其中一条规则显然是,图像必须位于渲染堆栈的底部。