There are a few places where JMP uses content from the clipboard - usually paired with a way to copy to the clipboard like axis<<Copy Axis Settings and axis<<Paste Axis Settings.
For your use case, I would recommend copying or moving the boxes rather than creating an image. To copy from a Row Legend you might do something like this:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ) );
rbiv = biv << report;
framebox = rbiv[Frame Box( 1 )];
framebox << Row Legend( "age", color( 1 ), Marker( 1 ) );
subset = dt<<Get Rows Where(:height > 58 & :weight < 95);
w = New Window("Custom Report",
H List Box(
Graph Box(FrameSize(300,300),MarkerSeg(:weight[subset], :height[subset],Row States(dt, subset))),
(biv<<Report)[OwnerBox(1)] << Clone Box;
)
);
The legend will still convert to an image when exported to HTML, but this keeps everything as JMP display boxes within JMP. However, you will note that the cloned legend is not clickable like the original legend. Using RemoveFrom() and InsertInto(), you can rearrange boxes without having to clone them. This makes a scrollable report similar to what you suggest:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = bivariate( y( :weight ), x( :height ), by( :age ) );
rbiv = biv[1] << report;
framebox = rbiv[Frame Box( 1 )];
framebox << Row Legend( "sex", color( 1 ), Marker( 1 ) );
// extract legend and report
legend = rbiv[OwnerBox(1)];
legendparent = legend<<parent;
legendbox = RemoveFrom(legendparent, 1);
toprpt = rbiv << Top Parent;
fullrpt = RemoveFrom(toprpt, 1);
// rearrange into a scrolled layout
toprpt << Append(hlist = HListBox(scrollbox=VScrollBox(800)));
InsertInto(scrollbox, fullrpt, 1);
InsertInto(hlist, legendbox, 2);