01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 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" ); } |
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 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 |