private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
{
int dpi = 96; //出力解像度(96 で Windows 標準 DPI と一致)
double ratio = 1; //出力ピクセルサイズの比率
IEnvelope pEnvelope = axMapControl1.TrackRectangle(); //マウス ドラッグでEnvelopeを取得
IActiveView pActiveView = axMapControl1.ActiveView;
IOutputRasterSettings pOutputRasterSettings = (IOutputRasterSettings)pActiveView.ScreenDisplay.DisplayTransformation;
pOutputRasterSettings.ResampleRatio = 1; //ラスタのピクセル比率を1に変更
IExport pExport = new ExportJPEGClass();
pExport.ExportFileName = @"D:\Workspace\test_JPEGExport1.jpg"; //保存場所
pExport.Resolution = dpi; //出力解像度
//出力画像のシンボル サイズを変更させる場合は基準縮尺を変更(ディスプレイと一致の場合は 0 を指定)
axMapControl1.Map.ReferenceScale = 0;
//RubberBand の範囲をディスプレイ解像度に変換
int rectLeft, rectTop, rectRight, rectBottom;
pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(pEnvelope.UpperLeft, out rectLeft, out rectTop);
pActiveView.ScreenDisplay.DisplayTransformation.FromMapPoint(pEnvelope.LowerRight, out rectRight, out rectBottom);
//MapControlの範囲で出力する場合
//tagRECT pRECT = pActiveView.ExportFrame;
//pRECT.left = 0;
//pRECT.top = 0;
//pRECT.right = (int)(pRECT.right * ratio);
//pRECT.bottom = (int)(pRECT.bottom * ratio);
//RubberBand の範囲を出力する場合
tagRECT pRECT;
pRECT.left = 0;
pRECT.top = 0;
pRECT.right = (int)((rectRight - rectLeft) * ratio);
pRECT.bottom = (int)((rectBottom - rectTop) * ratio);
//IEnvelope pVisibleBounds = pActiveView.Extent; //MapControlの範囲で出力する場合
IEnvelope pVisibleBounds = pEnvelope;
IEnvelope pPixelBounds = new EnvelopeClass();
pPixelBounds.PutCoords(pRECT.left, pRECT.top, pRECT.right, pRECT.bottom);
pExport.PixelBounds = pPixelBounds;
int hDc = pExport.StartExporting();
pActiveView.Output(hDc, (int)pExport.Resolution, pRECT, pVisibleBounds, null);
pExport.FinishExporting();
pExport.Cleanup();
pActiveView.Draw(hDc, null);
MessageBox.Show("Done");
}
Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)
Dim pMxApplication As IMxApplication
Set pMxApplication = Application
Dim pMxDocument As IMxDocument
Set pMxDocument = ThisDocument
Dim pRubberBand As IRubberBand
Set pRubberBand = New RubberEnvelope
Dim pEnvelope As IEnvelope
Set pEnvelope = pRubberBand.TrackNew(pMxApplication.Display, Nothing) 'マウス ドラッグでEnvelopeを取得
Dim pActiveView As IActiveView
Set pActiveView = pMxDocument.ActiveView
Dim pOutputRasterSettings As IOutputRasterSettings
Set pOutputRasterSettings = pActiveView.ScreenDisplay.DisplayTransformation
pOutputRasterSettings.ResampleRatio = 1 'ラスタのピクセル比率を1に変更
Dim pExport As IExport
Set pExport = New ExportJPEG
pExport.ExportFileName = "D:\Workspace\test_JPEGExport1.jpg" '保存場所
pExport.Resolution = 96 '解像度
Dim pRECT As tagRECT
pRECT = pActiveView.ExportFrame
pRECT.Left = 0
pRECT.Top = 0
pRECT.Right = pRECT.Right * pExport.Resolution / 96 'ディスプレイが96dpi設定の場合
pRECT.bottom = pRECT.bottom * pExport.Resolution / 96
Dim pVisibleBounds As IEnvelope
Set pVisibleBounds = pEnvelope
Dim pPixelBounds As IEnvelope
Set pPixelBounds = New Envelope
pPixelBounds.PutCoords pRECT.Left, pRECT.Top, pRECT.Right, pRECT.bottom
pExport.PixelBounds = pPixelBounds
Dim hDc As OLE_HANDLE
hDc = pExport.StartExporting
pActiveView.Output hDc, pExport.Resolution, pRECT, pVisibleBounds, Nothing
pExport.FinishExporting
pExport.Cleanup
pActiveView.Extent = pEnvelope
pActiveView.Draw hDc, Nothing
MsgBox "Done"
pActiveView.Refresh
End Sub