Beispiel #1
0
        private static Bitmap GenerateOverview(IRasterDataProvider prd, int[] bandNos, int maxSize)
        {
            CoordEnvelope      env = prd.CoordEnvelope;
            IOverviewGenerator v   = prd as IOverviewGenerator;
            Size   size            = v.ComputeSize(maxSize);//缩略图最大不超过的尺寸
            Bitmap bm = new Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb);

            v.Generate(bandNos, ref bm);
            return(bm);
        }
Beispiel #2
0
        private void UpdateBuffer()
        {
            ICanvasViewer viewer = _session.SmartWindowManager.ActiveCanvasViewer;

            if (viewer == null || viewer.ActiveObject == null)
            {
                return;
            }
            IRasterDrawing drawing = viewer.ActiveObject as IRasterDrawing;

            if (drawing == null || drawing.DataProvider == null)
            {
                return;
            }
            using (IRasterDataProvider prd = GeoDataDriver.Open(drawing.FileName) as IRasterDataProvider)
            {
                IOverviewGenerator ov = prd as IOverviewGenerator;
                if (ov == null)
                {
                    return;
                }
                Size size = ov.ComputeSize(200);
                if (_buffer != null)
                {
                    _buffer.Dispose();
                }
                _defaultBands = GetDefaultBands(prd);
                if (_defaultBands == null || _defaultBands.Length == 0)
                {
                    return;
                }
                if (_defaultBands.Length == 3)
                {
                    _buffer = new Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb);
                }
                else if (_defaultBands.Length == 1)
                {
                    _buffer         = new Bitmap(size.Width, size.Height, PixelFormat.Format8bppIndexed);
                    _buffer.Palette = BitmapBuilderFactory.GetDefaultGrayColorPalette();
                }
                else
                {
                    return;
                }
                //
                ov.Generate(_defaultBands, ref _buffer);
                //
                _resX = drawing.OriginalEnvelope.Width / _buffer.Width;
                _resY = drawing.OriginalEnvelope.Height / _buffer.Height;
            }
        }
Beispiel #3
0
        private Bitmap GenerateOverview(IRasterDataProvider prd, int[] bandNos)
        {
            CoordEnvelope env = prd.CoordEnvelope;

            if (env != null)
            {
                Envelope = new PrjEnvelope(env.MinX, env.MaxX, env.MinY, env.MaxY);
            }
            IOverviewGenerator v = prd as IOverviewGenerator;
            Size   size          = v.ComputeSize(1000);//缩略图最大不超过的尺寸
            Bitmap bm            = new Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb);

            v.Generate(bandNos, ref bm);
            return(bm);
        }
Beispiel #4
0
 public override void Dispose()
 {
     base.Dispose();
     _overviewGenerator = null;
     if (_rasterBands != null && _rasterBands.Count > 0)
     {
         foreach (IRasterBand band in _rasterBands)
         {
             band.Dispose();
         }
         _rasterBands.Clear();
         _rasterBands = null;
     }
     this.OrbitProjectionTransformControl.Free();
 }
Beispiel #5
0
        private void AVILayer_Click(object sender, EventArgs e)
        {
            string[] fnames = null;
            using (OpenFileDialog dlg = new OpenFileDialog())
            {
                dlg.Filter      = "栅格文件(*.dat)|*.dat";
                dlg.Multiselect = true;
                if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    fnames = dlg.FileNames;
                }
                else
                {
                    return;
                }
            }
            IRasterDataProvider prd;
            List <Bitmap>       bmps = new List <Bitmap>();
            Bitmap bp;

            foreach (string fname in fnames)
            {
                using (prd = GeoDataDriver.Open(fname) as IRasterDataProvider)
                {
                    IOverviewGenerator ovg = prd as IOverviewGenerator;
                    Size size = ovg.ComputeSize(800);
                    bp         = new Bitmap(size.Width, size.Height, PixelFormat.Format8bppIndexed);
                    bp.Palette = BitmapBuilderFactory.GetDefaultGrayColorPalette();
                    ovg.Generate(new int[] { 1 }, ref bp);
                    if (bp != null)
                    {
                        bmps.Add(bp);
                    }
                }
            }
            if (bmps.Count == 0)
            {
                return;
            }
            //IAVILayer aviLyr = new AVILayer(bmps.ToArray(), new GeoDo.RSS.Core.DrawEngine.CoordEnvelope(112, 113, 39, 40), 500);
            //aviLyr.IsRunning = true;
            //_canvas.LayerContainer.Layers.Add(aviLyr);
            ////_canvas.PrimaryDrawObject = drawings[0];
            ////_canvas.CurrentEnvelope = drawings[0].OriginalEnvelope;
            ////for (int i = 0; i < drawings.Length; i++)
            ////    drawings[i].StartLoading((t, p) => { Text = p.ToString() + "/" + t.ToString(); });
            //_canvas.Refresh(enumRefreshType.All);
        }
Beispiel #6
0
        private unsafe void DrawContourLine(IRasterDataProvider prd, ContourLine[] cLines)
        {
            if (cLines == null || cLines.Length == 0)
            {
                return;
            }
            IOverviewGenerator gen = prd as IOverviewGenerator;
            Size size = gen.ComputeSize(1000);

            size = new System.Drawing.Size(prd.Width, prd.Height);
            Bitmap bitmap = new Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb);
            float  scaleX = size.Width / (float)prd.Width;
            float  scaleY = size.Height / (float)prd.Height;

            gen.Generate(new int[] { 1, 1, 1 }, ref bitmap);
            //
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                foreach (ContourLine cLine in cLines)
                {
                    if (cLine == null || cLine.Count < 2)
                    {
                        continue;
                    }
                    //fixed (PointF* ptr0 = cLine.Points.ToArray())
                    //{
                    //    PointF* ptr = ptr0;
                    //    for (int i = 0; i < cLine.Points.Count; i++, ptr++)
                    //    {
                    //        ptr->X = ptr->X * scaleX;
                    //        ptr->Y = ptr->Y * scaleY;
                    //    }
                    //}
                    if ((byte)cLine.ContourValue == 100)
                    {
                        g.DrawCurve(Pens.Yellow, cLine.Points.ToArray());
                    }
                    else
                    {
                        g.DrawCurve(Pens.Red, cLine.Points.ToArray());
                    }
                }
            }
            //
            bitmap.Save("f:\\1.bmp", ImageFormat.Bmp);
        }
Beispiel #7
0
        private void TryCreateOverviewGenerator()
        {
            switch (_dataType)
            {
            case enumDataType.Byte:
                _overviewGenerator = new OverviewGenerator <byte>(this);
                break;

            case enumDataType.UInt16:
                _overviewGenerator = new OverviewGenerator <UInt16>(this);
                break;

            case enumDataType.Int16:
                _overviewGenerator = new OverviewGenerator <Int16>(this);
                break;

            case enumDataType.Int32:
                _overviewGenerator = new OverviewGenerator <Int32>(this);
                break;

            case enumDataType.UInt32:
                _overviewGenerator = new OverviewGenerator <UInt32>(this);
                break;

            case enumDataType.Int64:
                _overviewGenerator = new OverviewGenerator <Int64>(this);
                break;

            case enumDataType.UInt64:
                _overviewGenerator = new OverviewGenerator <UInt64>(this);
                break;

            case enumDataType.Float:
                _overviewGenerator = new OverviewGenerator <float>(this);
                break;

            case enumDataType.Double:
                _overviewGenerator = new OverviewGenerator <double>(this);
                break;
            }
        }
        public static Bitmap GetBitmapUseOriginResolution(this IRasterDrawing drawing)
        {
            IOverviewGenerator gen = drawing.DataProviderCopy as IOverviewGenerator;

            if (drawing.SelectedBandNos == null)
            {
                return(null);
            }
            Bitmap bm = null;

            if (drawing.SelectedBandNos.Length == 1)
            {
                bm         = new Bitmap(drawing.DataProviderCopy.Width, drawing.DataProviderCopy.Height, PixelFormat.Format8bppIndexed);
                bm.Palette = BitmapBuilderFactory.GetDefaultGrayColorPalette();
            }
            else
            {
                try
                {
                    bm = new Bitmap(drawing.DataProviderCopy.Width, drawing.DataProviderCopy.Height, PixelFormat.Format24bppRgb);
                }
                catch (Exception ex)
                {
                    throw new Exception(string.Format("无法创建过大的Bitmap[{0}*{1}]", drawing.DataProviderCopy.Width, drawing.DataProviderCopy.Height), ex.InnerException);
                }
            }
            string ext = Path.GetExtension(drawing.FileName).ToLower();

            if (ext == ".bmp" || ext == ".png" || ext == ".jpg" || ext == ".jpeg")
            {
                bm = (Bitmap)Bitmap.FromFile(drawing.FileName);
            }
            else
            {
                gen.Generate(drawing.SelectedBandNos, ref bm);
            }
            IRgbProcessorStack stack = drawing.RgbProcessorStack;

            stack.Apply(null, bm);
            return(bm);
        }
Beispiel #9
0
        private static BitmapObject[] GetBitmapObjects(string[] fnames, int maxSize, ICanvas canvas, out Size bmpSize,
                                                       out Size dataSize, out GeoDo.RSS.Core.DrawEngine.CoordEnvelope viewPrjEvp,
                                                       out GeoDo.RSS.Core.DF.CoordEnvelope viewGeoEvp,
                                                       out float resolution)
        {
            bmpSize    = Size.Empty;
            dataSize   = new Size();
            viewPrjEvp = null;
            viewGeoEvp = null;
            resolution = 0;
            List <BitmapObject> bmpObjs = new List <BitmapObject>();
            BitmapObject        bmpO;

            GeoDo.RSS.Core.DrawEngine.CoordEnvelope drawEvp = null;
            bool isFirst = true;

            foreach (string fname in fnames)
            {
                if (!File.Exists(fname))
                {
                    continue;
                }
                using (IRasterDataProvider prd = GeoDataDriver.Open(fname) as IRasterDataProvider)
                {
                    IOverviewGenerator ov = prd as IOverviewGenerator;
                    bmpSize = ov.ComputeSize(maxSize);
                    Bitmap         bmp      = new Bitmap(bmpSize.Width, bmpSize.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                    RasterIdentify identify = new RasterIdentify(fname);
                    object[]       sts      = GetColorTableFunc(prd, identify.ProductIdentify, identify.SubProductIdentify);
                    if (sts != null)
                    {
                        ov.Generate(new int[] { 1, 1, 1 }, sts, ref bmp);
                    }
                    else
                    {
                        int[] bands = prd.GetDefaultBands();
                        if (bands == null || bands.Length == 0)
                        {
                            return(null);
                        }
                        ov.Generate(bands, ref bmp);
                    }
                    drawEvp = GetDrawingEnvelop(canvas, prd);
                    if (isFirst)
                    {
                        viewPrjEvp = drawEvp;
                        ICoordinateTransform tans = canvas.CoordTransform;
                        viewGeoEvp = PrjToGeoCoordEvp(viewPrjEvp, tans);
                        resolution = prd.ResolutionX;
                        dataSize   = GetMaxDataSize(canvas, viewPrjEvp, prd, out viewGeoEvp);
                        isFirst    = false;
                    }
                    else
                    {
                        viewPrjEvp = viewPrjEvp.Union(drawEvp);
                        dataSize   = GetMaxDataSize(canvas, viewPrjEvp, prd, out viewGeoEvp);
                        //如果分辩率不相等则取最大的分辨率
                        if (resolution < prd.ResolutionX)
                        {
                            resolution = prd.ResolutionX;
                        }
                    }
                    bmpO = new BitmapObject(bmp, drawEvp);
                    bmpObjs.Add(bmpO);
                }
            }
            return(bmpObjs.Count != 0 ? bmpObjs.ToArray() : null);
        }