我目前正致力于在MATLAB中为卫星图像添加注释。由于每个文本字段下方的颜色可能会有很大变化,因此我想在文本下使用背景颜色,以便于查看和阅读。
但是,当我这样做时,很多地形都会变得模糊不清。我试图让每个文本框的背景颜色都是半透明的,但试图找到一个解决方案。但
有什么想法吗?我希望有一些UI元素,我可以将'facealpha'设置为0.5。我还需要支持轮换的文本(如下例所示)。
下面是一些示例代码和生成的图像。带有卫星数据的工作区也可以在链接中找到: Example workspace
figure(1);clf
imagesc(xx,yy,Map);
hold on
plot(xInspection,yInspection,'g.-')
% # Two ways of making a rotated text annotation.
% # Cant make background semi-transparent
testAnno= annotation('textarrow',[0.5 0.5],[0.5 0.5], ...
'string','textarrow annotation', ...
'HeadStyle','none','LineStyle', 'none',...
'TextRotation',asin(directionVec(1))*180/pi,...
'TextBackgroundColor',[0.7 0.7 0.7]);
testText = text(mean(xInspection),mean(yInspection),'text annotation', ...
'rotation',asin(directionVec(1))*180/pi, ...
'HorizontalAlignment','right', ...
'color',[0 0 0], ...
'backgroundcolor',[0.7 0.7 0.7], ...
'fontsize',8);
答案 0 :(得分:4)
它看起来不像annotation
或text
返回具有BackgroundAlpha
属性的HgObjects(它们可能存在,但我无法使用getundoc
找到它们或尝试各种不同的黑客攻击。)
我能够通过自己绘制背景来获得一些工作。这是一个简单的概念证明:
f = figure;
tObj = text(.5, .5, 'text object', 'FontSize', 20);
set(gca,'XLimMode', 'manual', 'YLimMode', 'manual'); % prevent the axes from resizing automatically
p = get(tObj, 'Extent'); %Get the outer position of the text
% now create a patch around the text object
pObj = patch([p(1) p(1) p(1)+p(3) p(1)+p(3)], [p(2) p(2)+p(4) p(2)+p(4) p(2)], 'r');
uistack(tObj, 'top'); % put the text object on top of the patch object
set(pObj , 'FaceAlpha', .2); % set the alpha of the patch face to .2
%Rotate the objects
set(tObj, 'Rotation', 20);
rotate(pObj, [0 0 1], 20);
答案 1 :(得分:2)
我担心唯一可以做到这一点的方法是不在注释中设置任何颜色,然后在每个注释的背景中放置patch
。所以像这样:
% Use completely transparent annotations
hA = annotation('textarrow', ..., 'TextBackgroundColor', 'none')
% Place a transparent patch exactly in the background of your annotation
hP = patch(X, Y, 'white', 'EdgeColor', 'none', 'FaceColor', 'white', ...
'alpha', 0.3)
% Ensure that your annotation is on top
uistack(hA, 'top')
但当然最大的问题是确定补丁的正确坐标(X
和Y
)。只需将坐标乘以rotation matrix即可轻松旋转。然而,找到贴片的长度和高度及其中心位置并不容易。您可以在Matlab中心找到一些有用的功能......