我有一张图片,正在通过 Ti 在表格内调用它。钾Z。
我试图在此图像中标记的位置通过 Web 应用程序存储在我的数据库中,该应用程序基于像素捕获 (x,y) 中的坐标,例如 (254,145)。但在我的 LaTeX 代码中,位置被标记为 1,2,3,4,...,10。
如何根据像素标记位置?如何从左上角而不是左下角开始我的位置 (0,0)?
{\begin{tikzpicture} \node [
above right,
inner sep=0] (image) at (0,0) {\includegraphics[width=11.535833333cm, height=10.900833333cm]{adeck.png}};
\begin{scope} %[
x={($0.1*(image.south east)$)},
y={($0.1*(image.north west)$)}]
% Grid
\draw[lightgray,step=1] (image.south west) grid (image.north east);
% Axes' labels
\foreach \x in {0,1,...,10} { \node [above] at (\x,0) {\x}; }
\foreach \y in {0,1,...,10} { \node [right] at (0,\y) {\y};}
% Labels
\node[circle,fill=green] at (6.0153020833,4.6302083333,){\small };
\end{scope}
\end{tikzpicture}}
答案1
这实际上只是一个计算问题。您知道图像的像素大小(我使用的图像是 192 × 108 像素),并且知道标记位置的基于像素的坐标。您进一步将 tikzpicture 的 x 和 y 值设置为 0.1 × 图像的宽度(或高度)。
鉴于此,将节点附加到某个基于像素的坐标上非常简单,因为 x 和 y 值只是 10 × <基于像素的坐标 x(或 y)值> : <基于像素的图像宽度(或高度)>。您可以使用该calc
库即时进行这些计算。
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node[inner sep=0, anchor=south west] (image) at (0,0) {\includegraphics[width=17.42cm, height=9.8cm]{example-1.png}};
\begin{scope}[
x={($0.1*(image.south east)$)},
y={($0.1*(image.north west)$)}
]
% Grid
\draw[lightgray,step=1] (image.south west) grid (image.north east);
% Axes' labels
\foreach \x in {0,1,...,10} { \node [below] at (\x,0) {\x}; }
\foreach \y in {0,1,...,10} { \node [left] at (0,\y) {\y}; }
% Labels
\node[circle,fill=green] at ({10*139/192},{10*77/108}) {};
\end{scope}
\end{tikzpicture}
\end{document}
不准确是由于舍入误差造成的。
如果要将其锚定在顶部,只需翻转相关内容(当然,基于像素的坐标的 y 值也应遵循此逻辑):
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node[inner sep=0, anchor=north west] (image) at (0,0) {\includegraphics[width=17.42cm, height=9.8cm]{example-1.png}};
\begin{scope}[
x={($0.1*(image.north east)$)},
y={($0.1*(image.south west)$)}
]
% Grid
\draw[lightgray, xstep=1, ystep=-1] (image.south west) grid (image.north east);
% Axes' labels
\foreach \x in {0,1,...,10} { \node [above] at (\x,0) {\x}; }
\foreach \y in {0,1,...,10} { \node [left] at (0,\y) {\y}; }
% Labels
\node[circle,fill=green] at ({10*139/192},{10*30/108}) {};
\end{scope}
\end{tikzpicture}
\end{document}
有一件事要注意:因为我们翻转了的 y 值tikzpicture
,所以我们需要相应地调整网格的选项:xstep=1, ystep=-1
。