Problem mit einfacher Vergrößerung eines Bildausschnitts

Tabellen und Grafiken erstellen und anordnen


Rev
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Di 21. Jun 2011, 08:36

Problem mit einfacher Vergrößerung eines Bildausschnitts

Beitrag von Rev »

Hallo alle zusammen,

ich hoffe, dass ich mich nicht vertan habe, allerdings habe ich im Forum kein Thema gefunden, dass mein peinlich kleines Problem aufgreift.
Alles was ich möchte, ist auf einfache Art und Weise eine Lupenfunktion für eine Grafik zu erstellen und einen umrahmten Ausschnitt aus einer Grafik separat (auch wieder eingerahmt) darzustellen. Nur leider beisse ich damit etwas auf Granit. Bis jetzt habe ich folgendes geschrieben:
\begin{figure}[h!]
	\begin{minipage}[c]{1\textwidth}
		\includegraphics[width=1\textwidth, clip=true, trim=1cm 1cm 1cm 7cm]{Kapitel_Simulation/System_ideal_stabil.pdf}
		\setlength{\unitlength}{1cm}
		\begin{picture}(1,1)
			\put(1.35,9){\framebox(1.5,0.75)[0,0]}
		\end{picture}	
	\end{minipage}
	\begin{minipage}[c]{1\textwidth}
			\fbox{\includegraphics[width=1\textwidth, clip=true, trim=5cm 17cm 10cm 15cm]{Kapitel_Simulation/System_ideal_stabil.pdf}}
	\end{minipage}
\caption{Stabiles Verhalten durch gleiche Prozessor-Taktungen}	
\label{fig:System_ideal_stabil}
\end{figure}
Wie schon gesagt ist mein Ziel innerhalb einer figure-Umgebung in einen eingerahmten Ausschnitt aus der Grafik "System_ideal_stabil.pdf" zu Zoomen und diesen Ausschnitt dann vergrößert mir unterhalb der Grafik wieder ausgeben zu lassen.
Erkennt irgendjemand meinen Fehler? Alles was bei dieser Umsetzung, wie ich sie oben eingefügt habe passiert, ist dass die Box völlig planlos über die Seitenbegrenzung gesetzt wird und der vergrößerte Ausschnitt auch nicht innerhalb der Box landet. Egal wie ich die Positionierung von \fbox mittels \put vorgenommen habe... immer kam das selbe blöde Ergebnis dabei raus.

Hoffe ihr habt eine Idee und könnt mir etwas weiterhelfen.

Gruß Christian

Benutzeravatar
Sepp99
Forum-Meister
Forum-Meister
Beiträge: 1569
Registriert: So 29. Aug 2010, 17:26
Wohnort: Offenhausen/OÖ

Beitrag von Sepp99 »

Eine möglich Lösung mit Tikz auf
http://tex.stackexchange.com/questions/ ... d-tikz-spy

Gruß, Sepp

Rev
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Di 21. Jun 2011, 08:36

Beitrag von Rev »

Hi Sepp,

das hört sich auf jeden Fall schon mal vielversprechend an.
Habe jetzt mal folgendes versucht:
\begin{figure}[h!]
\begin{tikzpicture}[
    zoomboxarray,
    zoomboxarray columns=1,
    zoomboxarray rows=1,
    connect zoomboxes,
    zoombox paths/.append style={line width=3pt}
]
    \node [image node] { \includegraphics[width=1\textwidth, clip=true, trim=1cm 7cm 1cm 7cm]{Kapitel_Simulation/System_ideal_stabil.pdf} };
    \zoombox[magnification=6]{0.45,0.67}
\end{tikzpicture}
\caption{Stabiles Verhalten durch gleiche Prozessor-Taktung}
\label{fig:System_ideal_stabil}
\end{figure}
Allerdings bekomme ich dabei die Fehlermeldung
"I do not know the key zoomboxarray and I am going to ignore it".
Die packages

, die anscheinend dafür benötigt werden, habe ich auch eingefügt (was allerdings anscheinend trotzdem nichts gebracht hat).
\usepackage{pgfplots}
\usepackage{adjustbox}
\usetikzlibrary{spy,calc}

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4299
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Also zuerst einmal solltest du dafür sorgen, dass du weißt, wo die picture-Umgebung überhaupt relativ zu deinem Bild ist. Bei deinem Code befindet sie sich auf einer neuen Zeile mit unklarem Abstand.

Zum zweiten muss du dir über die Koordinaten klar werden. Die trim-Werte beziehen sich auf das Originalbild, deine Picture-Werte auf das skalierte Bild.

Ich würde empfehlen, die picture-Umgebung an die linke untere Ecke zu bugsieren, viewport statt trim zu benutzen und die Bilder nachträglich zu skalieren. Dann ist die Mathematik einfacher:


\documentclass{scrartcl}
\usepackage{graphicx}

\begin{document}

\setlength{\unitlength}{1cm}%
\resizebox{0.5\textwidth}{!}{%
 \includegraphics{tiger}%
 \makebox[0pt][r]{%
 \begin{picture}(0,0)
   \put(5,10){\framebox(2,1)[0,0]}
 \end{picture}%
 \hphantom{\includegraphics{tiger}}}}

\resizebox{5cm}{!}{\fbox{%
  \includegraphics*[viewport=5cm 10cm 7cm 11cm]{tiger}}}

\end{document}

Rev
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Di 21. Jun 2011, 08:36

Beitrag von Rev »

Hallo Ulrike,

danke für den post :). Habe mich mal an deiner Version probiert und auch was ganz brauchbares hinbekommen. Als ich allerdings das ganze an einer pdf mit minipage-Umgebung versucht habe, ist plötzlich das Rechteck, das ich gezeichnet hatte (um den Ausschnitt zu markieren, der vergrößert dargestellt werden soll) verschwunden bzw. hat sich nicht mehr so verschieben lassen, wie ich es eigentlich gerne gehabt hätte.

Wo mein Denkfehler liegt weis ich leider nicht. Ich habe versucht alles 1 zu 1 so zu wiederholen, wie ich es bei dem vorherigen Versuch auch schon hinbekommen habe.
\begin{figure}[htb]
	\centering
	\begin{minipage}[c]{0.8\textwidth}
	\setlength{\unitlength}{1cm}%
\resizebox{0.5\textwidth}{!}{%
		\includegraphics[width=1\textwidth, clip=true, trim=2cm 7cm 1cm 9cm]{Simulationen/20Agenten/XY31AgentenFibonacci.pdf}%
		 \makebox[0pt][r]{%
 \begin{picture}(0,0)%
   \put(5,10){\framebox(2,1)[0,0]}%
 \end{picture}%
 \hphantom{\includegraphics{Simulationen/20Agenten/XY31AgentenFibonacci.pdf}}}}
% \begin{center}
\resizebox{5cm}{!}{\fbox{
  \includegraphics*[viewport=4cm 15cm 7cm 17cm]{Simulationen/20Agenten/XY31AgentenFibonacci.pdf}}}
%\end{center}
	\end{minipage} \newline
	\begin{minipage}[c]{0.8\textwidth}
		\includegraphics[width=1\textwidth, clip=true, trim=2cm 6cm 1cm 9cm]{Simulationen/20Agenten/Error31AgentenFibonacci.pdf}
	\end{minipage}
\caption{Simulationsgrenzen bei 31 Uhren - Graphenstruktur: Fibonacci}
\label{fig:31Fibonacci}\end{figure}
Gruß Chris

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4299
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Also erstens sind die minipages unnötig, und zweitens solltest du lernen Beispiele zu machen, die andere auch kompilieren können. Und drittens: Wenn du das Originalbild mit trim verkleinerst, solltest du nochmal darüber nachdenken, wo du nun bist. Ich empfehle in picture-Umgebung etwas reinzutun, mit dem du den Nullpunkt markierst.

Benutzeravatar
Sepp99
Forum-Meister
Forum-Meister
Beiträge: 1569
Registriert: So 29. Aug 2010, 17:26
Wohnort: Offenhausen/OÖ

Beitrag von Sepp99 »

Rev hat geschrieben:7Allerdings bekomme ich dabei die Fehlermeldung
"I do not know the key zoomboxarray and I am going to ignore it".
Die packages, die anscheinend dafür benötigt werden, habe ich auch eingefügt (was allerdings anscheinend trotzdem nichts gebracht hat).
\usepackage{pgfplots}
\usepackage{adjustbox}
\usetikzlibrary{spy,calc}
Siehe dazu die Anmerkungen in folgendem Beispiel:
%Nach http://tex.stackexchange.com/questions/87885/scalebar-overlay-and-tikz-spy
\listfiles
\documentclass{scrartcl}

% Folgende 4 Zeilen bei Bedarf
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{blindtext}% für Demo

% Folgende 3 Zeilen sind unbedingt notwendig
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{positioning}

% Neuer Befehl ------------------------------------------------------ unbedingt notwendig
\newcommand\scalebarandzoom[8][white]{ 
% #1 = color of bar
% #2 = image size
% #3 = image
% #4 = lower left corner of viewport
% #5 = upper right corner of viewport
% #6 = magnification factor
% #7 = actual size of the image in some units
% #8 = actual size of the scalebar in the same units than #7
\begin{tikzpicture}[x=#2, y=#2, font=\footnotesize]
  \node[anchor=south west,inner sep=0] (image) at (0,0) {\includegraphics[width=#2]{#3}};
% Mit folgenden 3 Zeilen kann ein Hilfsgitter über dir Graphik gelegt werden:
   %\draw[help lines,xstep=.1,ystep=.1] (0,0) grid (1,1);
   %\foreach \x in {0,1,...,9} { \node [anchor=north] at (0.\x,0) {.\x}; }
   %\foreach \y in {0,1,...,9} { \node [anchor=east] at (0,0.\y) {.\y}; }
  \coordinate (viewport lower left) at (#4);
  \coordinate (viewport upper right) at (#5);
  \draw[red] (viewport lower left) rectangle (viewport upper right);
  \node[right=of image, draw=red, inner sep=1pt] (zoom) {%
       \scalebox{#6}{\tikz{
          \clip (#4) rectangle (#5);
          \node[anchor=south west,inner sep=0] at (0,0) {\includegraphics[width=#2]{#3}};
         }}%
       };
  % Help lines
  \draw[red, dashed] (viewport lower left|-viewport upper right) -- (zoom.north west);
  \draw[red, dashed] (viewport lower left) -- (zoom.south west);
  % Scalebars
  \fill [#1] (image.south east) ++(-2mm,2mm) ++(-#8/#7,    0mm) rectangle ++(#8/#7,   1.5mm);
  \fill [#1] (zoom.south east)  ++(-2mm,2mm) ++(-#8/#7*#6, 0mm) rectangle ++(#8/#7*#6,1.5mm);
\end{tikzpicture}
}
% Ende Befehl --------------------------------------------------------------------------------

% Aufruf des Befehls:
%
% \scalebarandzoom[red]{7cm}{cheek.png}{0.52, 0.23}{0.68,0.35}{5.5}{500}{50}
%                  |    |     |         |           |          |    |    |
%                  |    |     |         |           |          |    |    -8 für Massstabsbalken
%                  |    |     |         |           |          |    -7 für Massstabsbalken
%                  |    |     |         |           |          -6 Vergrößerungsfaktor
%                  |    |     |         |           -5 LUPE rechts oben, ev. Hilfsgitter verwenden
%                  |    |     |         -4 LUPE links unten, ev. Hilfsgitter verwenden
%                  |    |     -3 Bildname, Endung png, jpg, pdf kann weggelassen werden
%                  |    -2 Bildgröße
%                  -1 Farbe Massstabsbalken

\begin{document}

\section{Test - Bild mit Lupe}

\blindtext
% hier wird mein >testbild< verwendet, versuchs mit deinem >Kapitel_Simulation/System_ideal_stabil.pdf<
\begin{figure}[htb]%
\centering
\scalebarandzoom%
	[green]% Farbe Balken
	{.45\linewidth}%Bildgröße
	{testbild}%Bild
	{0.52, 0.3}% Lupe lu
	{0.68,0.45}% Lupe ro
	{5.5}%Vergrößerungsfaktor
	{500}%für Balken
	{50}%für Balken
\caption{Das ist der Test mit einer Vergrößerung (hier $5\frac{1}{2}\times$).}%
\label{fig:vergroess}%
\end{figure}
%
\blindtext Siehe Bild~\ref{fig:vergroess}.


\end{document}
Gruß, Sepp

Rev
Forum-Anfänger
Forum-Anfänger
Beiträge: 13
Registriert: Di 21. Jun 2011, 08:36

Beitrag von Rev »

Hi Sepp,

deine Lösung ist wirklich elegant. Allerdings hätte ich noch ein paar Fragen zu den einzelnen Befehlen. Ich bin auf die schnelle mit google da nämlich auch nicht schlau gewordne. Allerdings kannst du mir vllt. ein paar Fragen beantworten oder mir Literatur empfehlen, wo ich das nachschlagen kann.
Was ich nicht so ganz verstanden habe, sind folgende Punkte:

  • Warum wird "font=\footnotesize" definiert?

    Was ist das Besondere an "anchor=south west" in "\node"?

    Wofür steht "inner sep"? (Dazu habe ich überhaupt nichts gefunden)

    Ich habe gemerkt, dass die Zoom-Koordinaten nicht stimmen, wenn ich das Bild vorher zurechtschneide und wollte mir ein paar weitere Koordinaten definieren
      \coordinate (zoom lower left) at {(#4)+(2,7)};
      \coordinate (zoom upper right) at {(#4)+(-1,-9)};
    Das ging allerdings etwas daneben. Weist du, wie ich Koordinaten relativ zu den übergebenen Koordinaten definieren kann?
    Wie schon gesagt, wäre es super, wenn du mir darauf eine Antwort geben könntest oder mir vllt. Literatur zu dem Thema vorschlagen könntest, in der das ganze sozusagen auch etwas "für Blöde" beschrieben wird.

    Gruß Christian

    Benutzeravatar
    Sepp99
    Forum-Meister
    Forum-Meister
    Beiträge: 1569
    Registriert: So 29. Aug 2010, 17:26
    Wohnort: Offenhausen/OÖ

    Beitrag von Sepp99 »

    Rev hat geschrieben: Warum wird "font=\footnotesize" definiert?
    Für die Beschriftung des Hilfsgitters, schalte es einfach einmal ein.
    Rev hat geschrieben:Ich habe gemerkt, dass die Zoom-Koordinaten nicht stimmen, wenn ich das Bild vorher zurechtschneide und wollte mir ein paar weitere Koordinaten definieren
      \coordinate (zoom lower left) at {(#4)+(2,7)};
      \coordinate (zoom upper right) at {(#4)+(-1,-9)};
    Das ging allerdings etwas daneben. Weist du, wie ich Koordinaten relativ zu den übergebenen Koordinaten definieren kann?
    Dazu habe ich den Befehl für weitere graphicx-Optionen erweitert:
    % Nach http://tex.stackexchange.com/questions/87885/scalebar-overlay-and-tikz-spy
    \listfiles
    \documentclass{scrartcl}
    
    % Folgende 4 Zeilen bei Bedarf
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[ngerman]{babel}
    \usepackage{blindtext}% für Demo
    
    % Folgende 3 Zeilen sind unbedingt notwendig
    \usepackage{graphicx}
    \usepackage{tikz}
    \usetikzlibrary{positioning}
    
    % Neuer Befehl ------------------------------------------------------ unbedingt notwendig
    \newcommand\scalebarandzoom[9][white]{ 
    % #1 = color of bar
    % #2 = image size
    % #3 = image
    % #4 = lower left corner of viewport
    % #5 = upper right corner of viewport
    % #6 = magnification factor
    % #7 = actual size of the image in some units
    % #8 = actual size of the scalebar in the same units than #7
    % #9 = Optionen für \includegraphics
    \begin{tikzpicture}[x=#2, y=#2, font=\footnotesize]
      \node[anchor=south west,inner sep=0] (image) at (0,0) {\includegraphics[width=#2#9]{#3}};
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%    Mit folgenden 3 Zeilen kann ein Hilfsgitter über dir Graphik gelegt werden:    %%
       %\draw[help lines,xstep=.1,ystep=.1] (0,0) grid (1,1);
       %\foreach \x in {0,1,...,9} { \node [anchor=north] at (0.\x,0) {.\x}; }
       %\foreach \y in {0,1,...,9} { \node [anchor=east] at (0,0.\y) {.\y}; }
      \coordinate (viewport lower left) at (#4);
      \coordinate (viewport upper right) at (#5);
      \draw[red] (viewport lower left) rectangle (viewport upper right);
      \node[right=of image, draw=red, inner sep=1pt] (zoom) {%
           \scalebox{#6}{\tikz{
              \clip (#4) rectangle (#5);
              \node[anchor=south west,inner sep=0] at (0,0) {\includegraphics[width=#2#9]{#3}};
             }}%
           }; 
      % Help lines
      \draw[red, dashed] (viewport lower left|-viewport upper right) -- (zoom.north west);
      \draw[red, dashed] (viewport lower left) -- (zoom.south west);
      % Scalebars
      \fill [#1] (image.south east) ++(-2mm,2mm) ++(-#8/#7,    0mm) rectangle ++(#8/#7,   1.5mm);
      \fill [#1] (zoom.south east)  ++(-2mm,2mm) ++(-#8/#7*#6, 0mm) rectangle ++(#8/#7*#6,1.5mm);
    \end{tikzpicture}
    }
    % Ende Befehl --------------------------------------------------------------------------------
    
    % Aufruf des Befehls:
    %
    % \scalebarandzoom[red]{7cm}{cheek.png}{0.52, 0.23}{0.68,0.35}{5.5}{500}{50}{Optionen}
    %                  |    |     |         |           |          |    |    |   |
    %                  |    |     |         |           |          |    |    |   -9 Optonen graphicx
    %                  |    |     |         |           |          |    |    -8 für Massstabsbalken
    %                  |    |     |         |           |          |    -7 für Massstabsbalken
    %                  |    |     |         |           |          -6 Vergrößerungsfaktor
    %                  |    |     |         |           -5 LUPE rechts oben, ev. Hilfsgitter verwenden
    %                  |    |     |         -4 LUPE links unten, ev. Hilfsgitter verwenden
    %                  |    |     -3 Bildname, Endung png, jpg, pdf kann weggelassen werden
    %                  |    -2 Bildgröße
    %                  -1 Farbe Massstabsbalken
    
    \begin{document}
    
    \section{Test - Bild mit Lupe}
    
    \blindtext
    % hier wird mein >testbild< verwendet, versuchs mit deinem >Kapitel_Simulation/System_ideal_stabil.pdf<
    \begin{figure}[htb]%
    \centering
    \scalebarandzoom%
    	[green]% Farbe Balken #1
    	{.4\linewidth}% Bildgröße #2
    %	{testbild}% Bild
    	{subcontfloat.pdf}% Bild (hier mein test.pdf) #3
    	{0.1, 0.15}% Position Lupe links unten, zur Erleichtrung Hilfsgitter (s. o.) einschalten! #4
    	{0.3,0.35}% Position Lupe rechts oben, zur Erleichtrung Hilfsgitter (s. o.) einschalten! #5
    	{5.5}% Vergrößerungsfaktor #6
    	{500}% für Balken #7
    	{50}% für Balken #8
    	{,clip=true,trim=2cm 19cm 2cm 3cm}% Optionen für graphicx !!!!!!!!!!!!!!!!!! #9
    \caption{Das ist der Test mit einer Vergrößerung (hier $5\frac{1}{2}\times$).}%
    \label{fig:vergroess}%
    \end{figure}
    %
    \blindtext Siehe Bild~\ref{fig:vergroess}.
    
    \end{document}
    Rev hat geschrieben:Wofür steht "inner sep"? (Dazu habe ich überhaupt nichts gefunden)

    Wie schon gesagt, wäre es super, wenn du mir darauf eine Antwort geben könntest oder mir vllt. Literatur zu dem Thema vorschlagen könntest, in der das ganze sozusagen auch etwas "für Blöde" beschrieben wird.
    Für spezielle Fragen sind wie immer erste Anlaufstelle die Paketdokumentationen und NICHT google! Diese bekommst in fast allen Fällen unter http://texdoc.net/ oder von der Kommandozeile mit texdoc >Paketname<.
    Einfach z.B. tikz eingeben, dann kommst auch auf pgfmanual. Du hast ja jetzt die Stichwörter dazu. Spiele einfach einmal mit meinem Beispiel herum, passieren kann ja nichts. Zur Lokalisierung der Lupe (links/unten - rechts/oben) schalte einfach einmal das Hilfsgitter ein!

    Gruß, Sepp

    Rev
    Forum-Anfänger
    Forum-Anfänger
    Beiträge: 13
    Registriert: Di 21. Jun 2011, 08:36

    Beitrag von Rev »

    Hallo nochmal,

    @Sepp
    habe in letzter Zeit ein paar Sachen mit deiner Vorlage ausprobiert und diese erweitert. Jetzt funktioniert soweit auch alles und ich glaube soweit hinter die meisten Dinge gestiegen zu sein.

    Vielen vielen Dank für den Support. Meistens bekommt man immer nur nen komplexen Quellcode vor den Bug geknallt und die Antwort "Da, friss oder stirb". Deshalb finde ich es prima, dass du mir den Quellcode ein bisschen aufdröseln konntest :).

    Damit denke ich das Thema als "abgeschlossen" markieren zu können.

    Gruß Christian

    Antworten