我想覆盖一个坐标系(带有网格),其中左下角是(0,0),右下角是(782,0),右上角是(782,512),左上角是(0,512)。
理想情况下,代码应该能够根据我放置的任何尺寸图像(x,y)创建网格。
输出应在图像上叠加适当的网格(带有垂直线和水平线)。
我试着看在图像阵列上绘制网格,但不明白它是如何完成的,并且我还希望它是用于一张图片而不是一个数组。
答案1
一种方法是使用overpic
选项abs
,但您可能想使用percent
而忘记原始或最终图像大小(以像素为单位)。找到覆盖层的正确坐标后,将选项设置grid
为false
。
\documentclass[twocolumn]{article}
\usepackage{overpic}
\usepackage[margin=1in]{geometry}
\begin{document}
\section*{Grid in percentage}\bigskip
\begin{overpic}[percent,grid=true,tics=20,scale=.5]{example-image-16x10.png}
\put(20,5){\sffamily\bfseries (that is 400 $\times$ 250 pixels)}
\end{overpic}
\section*{Grid with absolute pixels}\bigskip
\begin{overpic}[abs,grid=true,tics=40,scale=.5]{example-image-16x10.png}
\put(39,10){\sffamily\bfseries (now are 200 $\times$ 125 pixels)}
\end{overpic}
\newpage
\section*{Original image}\bigskip
\includegraphics[scale=.5]{example-image-16x10.png}
($300\times200\,\mathrm{bp} = 400 \times 250\,\mathrm{pixels}$)
\end{document}
答案2
我并不声称这是我发明的。相反,我相信我以前见过非常类似的东西,但我真的找不到。当然,如果能找到原帖,我很乐意删除这篇帖子。这都是杰克的回答加上根据像素数重新缩放。我添加了一个指向(300,200)
像素单位坐标的箭头。(我将其命名为你的图片 Einstein.jpg
。
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node[anchor=south west,inner sep=0] (image) at (0,0)
{\includegraphics{Einstein.jpg}};
\begin{scope}[x={(${(1/782)}*(image.south east)$)},
y={(${(1/512)}*(image.north west)$)}]
\coordinate (X) at (300,200);
\draw[blue,latex-,blue,line width=2pt] (X) -- ++(2cm,1cm);
\end{scope}
\end{tikzpicture}
\end{document}
如果您想绘制实际网格,请使用。
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\node[anchor=south west,inner sep=0] (image) at (0,0)
{\includegraphics{Einstein.jpg}};
\begin{scope}[x={(${(1/782)}*(image.south east)$)},
y={(${(1/512)}*(image.north west)$)}]
\draw (0,0) grid[step=1] (782,512);
\end{scope}
\end{tikzpicture}
\end{document}