# inset legend from top right corner / find size of swatchlegend bounding box

The question is the following. Using Inset, we can insert a legend in a Plot (in a Graphic, in general). E.g.

scale = 2
step=0.05

marker=Graphics[{FilledCurve@Line[{{0,0},{2,0},{2,1},{0,1},{0,0}}]},ImageSize->100];
legendlabels={"a"};
legend=SwatchLegend[{Directive[Blue,[email protected]]},legendlabels,
LegendMarkers->ConstantArray[marker,1],
LegendMarkerSize->{{25,12.5}},LegendFunction->"Frame"];

epilog = {Inset[legend, Scaled[{1, 1} - step*{scale, 1}]]};

Show[Plot[Sin[x], {x, 0, 6 Pi}], Epilog -> epilog, Frame -> True, PlotRange -> {{0, 6 Pi}, {-1, 1}}, PlotRangePadding -> None]


By adjusting, in this case, the variables "scale" and "step" we can move the legend from the upper right corner towards the center of the plot.

However, if we knew the relative size of the axes of the rectangle bounding the legend, we could substitute it in "scale" and move the legend in such a way that it keeps the same distance from the x and y axes. Therefore...

Question

Is there a way to know the size of a legend constructed via SwatchLegend, LineLegend and the like?

Using Rasterize (Mathematica 10) we can get the size of the legend, and therefore do:

legend=SwatchLegend[{Directive[Blue,[email protected]]},legendlabels,
LegendMarkers->ConstantArray[marker,1],
LegendMarkerSize->{{25,12.5}},LegendFunction->"Frame"]

Rasterize[legend, "RasterSize"]
(* {51,31} *)

epilog = {Inset[legend, Scaled[{1, 1} - 0.05*{51/31, 1}]]}


i.e. take "scale" = 51/31 and "step" = 0.05. The result of

Show[Plot[Sin[x], {x, 0, 6 Pi}], Epilog -> epilog, Frame -> True, PlotRange -> {{0, 6 Pi}, {-1, 1}}, PlotRangePadding -> None]


is shown here (note "AspectRatio" = 1). As of Mathematica 10, you can use the "RasterSize" element of Rasterize to get the size of almost anything in pixels, like so:
legend = SwatchLegend[{Directive[Blue, [email protected]]}, legendlabels,