我有一個填充圖形生成器的 BorderBox,我想將其另存為圖片。
我在其中的 FrameBox 上有一個「新增圖形腳本」。該腳本使用變數:
dt << Graph Builder(
Size( 600, 400 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Title Alignment( "Right" ),
Variables( X( :X ), Y( :Y ), Overlay( :Overlay ) ),
Elements(
Contour( X, Y, Legend( 5 ), Number of Levels( 18 ), Smoothness( -0.8899 ) ),
Points( X, Y, Legend( 4 ) )
),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 1 ), Add Graphics Script(
Transparency( 0.5 );
Fill Color( "Green" );
Pen Color( "Dark Green" );
Line(
{marginXmin, marginYmin},
{marginXmin, marginYmax},
{marginXmax, marginYmax},
{marginXmax, marginYmin}
{marginXmin, marginYmin}
);
)}
)
),如果我打開一個新窗口,其中包含名為“imageForReport”的 BorderBox,其中包含此 GraphBuilder:
window = New Window( "My Report", imageForReport );
然後將報告保存在圖像中:
imageForReport << save picture( imgPath, "png" );
一切都很好,一切正常。
但我只需要那個視窗來即時調試,最終的產品是 PNG 圖像檔。
因此,對於運行數千個報告的生產版本,我節省了資源,並且不打開該視窗。
但在這種情況下,圖形腳本不起作用,因為第一個變數(我猜其餘的變數)未解析。我明白了:
Name Unresolved: marginXmin in access or evaluation of 'marginXmin' , marginXmin/*###*/
在日誌視窗中。如何解決這個問題而不需要不必要地打開和關閉數千個視窗?
更新:
以下是測試此行為的範例腳本:
Clear Log();
Clear Symbols();
Clear Globals();
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
cutOutX = 20;
cutOutY = 3;
marginXmin = 70;
marginXmax = 160;
marginYmin = 55;
marginYmax = 65;
imageForReport = Border Box(
VLBox = V List Box(
//Zero row
headerTB = Text Box( "Test savingimage" ),
gb = Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 1 ), Add Graphics Script(
Transparency( 0.5 );
Fill Color( "Green" );
Pen Color( "Dark Green" );
Line(
{marginXmin, marginYmin},
{marginXmin, (marginYmax - cutOutY)},
{(marginXmin + cutOutX), (marginYmax - cutOutY)},
{(marginXmin + cutOutX), marginYmax},
{(marginXmax - cutOutX), marginYmax},
{(marginXmax - cutOutX), (marginYmax - cutOutY)},
{marginXmax, (marginYmax - cutOutY)},
{marginXmax, marginYmin},
{marginXmin, marginYmin}
);
)}
)
)
)
)
);
window = New Window( "My Report", imageForReport );
imageForReport << save picture( "C:\temp\testImage.png", "png" );如果按原樣運行 - 它將打開包含繪圖和形狀的窗口,並將保存包含繪圖和形狀的 PNG 圖像。
如果你評論新的視窗線 - 它會將繪圖保存到 PNG 圖像而不打開新窗口,但其中的形狀將會遺失。
有人可以解釋它以及如何解決它嗎?如何在已儲存的影像中取得形狀,而無需開啟/關閉帶有繪圖的新視窗?
是的,這是有原因的。
該腳本按計劃在後台運行,處理數以萬計的此類報告,其中一些圖表在具有數百萬行的表格上。 我注意到不繪製窗口可以節省大量的處理時間。 另外,這絕對沒有必要——沒有人會在晚上連續幾個小時看到這數千個窗口彈出。
我懷疑繪圖窗口對顯示框執行類似於 Evaluate() 的操作,沒有它,顯示框中的變量不會被評估。 有什麼方法可以在不實際打開窗口的情況下獲得類似的效果?
是否有您無法打開窗口的原因,或者問題只是窗口的可見性並彈出?
你可以用<< 顯示窗口(0)保存後關閉:
window = New Window( "My Report", << show window(0), imageForReport );
window << save picture( "C:\temp\testImage.png", "png" );
window << Close Window;