Yes, it can be done with \resizebox.
I also use a trick for making the space between the figures the same horizontally and vertically.
\documentclass{article}
\usepackage{graphicx,booktabs}
\usepackage{lipsum}
\begin{document}
\lipsum[3]
\begin{figure}[htp] % not just h
\centering % not center
\resizebox{\textwidth}{!}{%
\renewcommand{\arraystretch}{0}%
\begin{tabular}{@{}c@{\hspace{3pt}}c@{}}
\includegraphics[width=1in]{example-image.pdf} &
\includegraphics[width=1in]{example-image-a.pdf} \\
\addlinespace[3pt]
\includegraphics[width=1in]{example-image-b.pdf} &
\includegraphics[width=1in]{example-image-c.pdf}
\end{tabular}% <-- don't forget
}
\caption{my caption}
\end{figure}
\lipsum[4]
\end{document}

For 3 by 3 arrangement it is similar.
\documentclass{article}
\usepackage{graphicx,booktabs}
\usepackage{lipsum}
\begin{document}
\lipsum[3]
\begin{figure}[htp] % not just h
\centering % not center
\resizebox{\textwidth}{!}{%
\renewcommand{\arraystretch}{0}%
\begin{tabular}{@{}c@{\hspace{3pt}}c@{\hspace{3pt}}c@{}}
\includegraphics[width=1in]{example-image.pdf} &
\includegraphics[width=1in]{example-image.pdf} &
\includegraphics[width=1in]{example-image-a.pdf} \\
\addlinespace[3pt]
\includegraphics[width=1in]{example-image-b.pdf} &
\includegraphics[width=1in]{example-image-b.pdf} &
\includegraphics[width=1in]{example-image-c.pdf} \\
\addlinespace[3pt]
\includegraphics[width=1in]{example-image-b.pdf} &
\includegraphics[width=1in]{example-image-b.pdf} &
\includegraphics[width=1in]{example-image-c.pdf}
\end{tabular}% <-- don't forget
}
\caption{my caption}
\end{figure}
\lipsum[4]
\end{document}

Could you please elaborate on how to expand your code to 3x3? I am confused by the @{} and the hspace?
– Jannis May 15 '18 at 22:19\begin{tabular}{@{}c@{\hspace{3pt}}c@{\hspace{3pt}}c@{}}. With@{}we remove the outer padding, with@{\hspace{3pt}}we set an intercolumn space of 3pt (that will be scaled, of course). I added the code. – egreg May 15 '18 at 22:23