コード例 #1
0
ファイル: DEMReader.cs プロジェクト: carlhuth/GenXSource
        public static void ReadFile(string file, out Bitmap image)
        {
            FileStream fs    = new FileStream(file, FileMode.Open);
            int        nRows = 6000;
            int        nCols = 4800;

            int sampleRate = 5;
            int spr        = nCols / sampleRate;
            int spc        = nRows / sampleRate;

            image = new Bitmap(spr, spc);
            HeightBandRange hbr = new HeightBandRange();

            hbr.AddBand(-0.1f, Color.Red);
            hbr.AddBand(0.0f, Color.DarkBlue);
            hbr.AddBand(0.01f, Color.DarkGreen);
            hbr.AddBand(0.2f, Color.LightGreen);
            hbr.AddBand(0.5f, Color.SlateGray);
            hbr.AddBand(1.0f, Color.White);

            // read a row at a time
            byte[] data    = new byte[2];
            byte[] dataRev = new byte[2];
            for (int row = 0; row < spc; row++)
            {
                long pos = row * nCols * 2 * sampleRate;
                fs.Seek(pos, SeekOrigin.Begin);

                for (int col = 0; col < spr; col++)
                {
                    int avrValue = 0;
                    for (int i = 0; i < sampleRate; i++)
                    {
                        fs.Read(data, 0, 2);
                        dataRev[0] = data[1];
                        dataRev[1] = data[0];
                        int value = BitConverter.ToInt16(dataRev, 0);
                        if (value != -9999)
                        {
                            avrValue += value;
                        }
                    }
                    avrValue /= sampleRate;
                    if (avrValue == 0)
                    {
                        image.SetPixel(col, row, Color.Blue);
                    }
                    else
                    {
                        // encode to greyscale

                        /*byte clr = (byte)((avrValue * 0.05f) + 32);
                         * image.SetPixel(col, row, Color.FromArgb(255, clr, clr, clr));*/
                        image.SetPixel(col, row, hbr[avrValue / 5000f]);
                    }
                    //fs.Seek((col * 2 * sampleRate) + pos, SeekOrigin.Begin);
                }
            }
        }
コード例 #2
0
ファイル: DEMReader.cs プロジェクト: xuchuansheng/GenXSource
        public static void ReadFile(string file, out Bitmap image)
        {
            FileStream fs = new FileStream(file, FileMode.Open);
            int nRows = 6000;
            int nCols = 4800;

            int sampleRate = 5;
            int spr = nCols / sampleRate;
            int spc = nRows / sampleRate;

            image = new Bitmap(spr, spc);
            HeightBandRange hbr = new HeightBandRange();
            hbr.AddBand(-0.1f, Color.Red);
            hbr.AddBand(0.0f, Color.DarkBlue);
            hbr.AddBand(0.01f, Color.DarkGreen);
            hbr.AddBand(0.2f, Color.LightGreen);
            hbr.AddBand(0.5f, Color.SlateGray);
            hbr.AddBand(1.0f, Color.White);

            // read a row at a time
            byte[] data = new byte[2];
            byte[] dataRev = new byte[2];
            for (int row = 0; row < spc; row++)
            {
                long pos = row * nCols * 2 * sampleRate;
                fs.Seek(pos, SeekOrigin.Begin);
                
                for (int col = 0; col < spr; col++)
                {
                    int avrValue = 0;
                    for (int i = 0; i < sampleRate; i++)
                    {
                        fs.Read(data, 0, 2);
                        dataRev[0] = data[1];
                        dataRev[1] = data[0];
                        int value = BitConverter.ToInt16(dataRev, 0);
                        if (value != -9999)
                            avrValue += value;
                    }
                    avrValue /= sampleRate;
                    if (avrValue == 0)
                        image.SetPixel(col, row, Color.Blue);
                    else
                    {
                        // encode to greyscale
                        /*byte clr = (byte)((avrValue * 0.05f) + 32);
                        image.SetPixel(col, row, Color.FromArgb(255, clr, clr, clr));*/
                        image.SetPixel(col, row, hbr[avrValue / 5000f]);
                    }
                    //fs.Seek((col * 2 * sampleRate) + pos, SeekOrigin.Begin);
                }
            }
        }
コード例 #3
0
 /// <summary>
 /// Initializes a new instance of the HeightBandDEMSampler class.
 /// </summary>
 /// <param name="heightBand"></param>
 public HeightBandDEMSampler(HeightBandRange heightBand)
 {
     this.heightBand = heightBand;
 }
コード例 #4
0
ファイル: UI3DVisControl.cs プロジェクト: carlhuth/GenXSource
        public void LoadVisualization(DataProfile dataProfile, DataProfile.SubProfile subProfile,
                                      IDataSourceReader dataSrcReader, DataSourceInfo dataSrcInfo)
        {
            renderFrame = true;
            renderingThread.Start();

            controlStatus = ControlStatus.Loading;
            rContext.LoadingLayer.SetProgress(0);
            rContext.LoadingLayer.SetText("Loading... DEM Geometry");
            rContext.LoadingLayer.Visible = true;
            Render();

            // load data from dlg into database
            database = new RasterDatabase.RasterDatabase();
            object filteredData = subProfile.Filter.FilterData(dataSrcReader);

            if (filteredData is byte[])
            {
                DataLayer dataLayer = new DataLayer("DEM", 8, "byte");
                dataLayer.AddArea(new ByteArea(new Rectangle(new Point(), dataSrcReader.Info.Resolution),
                                               new RectangleF(0, 0, 1, 1),
                                               (byte[])filteredData, dataSrcReader.Info.Resolution));
                database.AddLayer(dataLayer);
            }
            else if (filteredData is float[])
            {
                DataLayer dataLayer = new DataLayer("DEM", 32, "float");
                dataLayer.AddArea(new FloatArea(new Rectangle(new Point(), dataSrcReader.Info.Resolution),
                                                new RectangleF(0, 0, 1, 1),
                                                (float[])filteredData, dataSrcReader.Info.Resolution));
                database.AddLayer(dataLayer);
            }

            // load data source(s)
            DataSourceItem item = new DataSourceItem(dataSrcInfo.BppType,
                                                     (Bitmap)PreviewRasterizer.DrawRotatedBandPreview(dataSrcInfo.Bands,
                                                                                                      64, dataSrcInfo));

            heightDataSrcs.Add(item);

            // load diffuse sources
            // grey-scale for height
            GreyScaleDEMSampler srcImgSampler = new GreyScaleDEMSampler();
            Bitmap srcImg = srcImgSampler.GenerateBitmap(new Size(64, 64), database.Layers[0].Areas[0]);

            item            = new DataSourceItem("Height", srcImg);
            item.DEMSampler = srcImgSampler;
            //(Bitmap)PreviewRasterizer.DrawRotatedBandPreview(new DataSourceInfo.DataBandInfo[] { new DataSourceInfo.DataBandInfo("Source", srcImg) },
            //64, null));
            diffuseDataSrcs.Add(item);

            // load colour image if possible as other source (i.e the original if an RGB img)
            if (dataSrcReader.Info.SupportsRGB())
            {
                item = new DataSourceItem("SourceRGB",
                                          SourceDataDiffuseSampler.SampleRGBDiffuseMap((GDALReader)dataSrcReader,
                                                                                       new Size(64, 64)));
                diffuseDataSrcs.Add(item);
                reader = (GDALReader)dataSrcReader;
            }

            // height band range
            HeightBandRange hbr = new HeightBandRange();

            hbr.AddBand(0, Color.DarkGreen);
            hbr.AddBand(0.25f, Color.Blue);
            hbr.AddBand(0.4f, Color.DarkGreen);
            hbr.AddBand(0.5f, Color.Green);
            hbr.AddBand(0.8f, Color.Gray);
            hbr.AddBand(1, Color.White);
            HeightBandDEMSampler hBandSampler = new HeightBandDEMSampler(hbr);

            item = new DataSourceItem("HeightBands",
                                      hBandSampler.GenerateBitmap(new Size(64, 64), database.Layers[0].Areas[0]));
            item.DEMSampler = hBandSampler;
            diffuseDataSrcs.Add(item);

            // load database into visualization
            dem = new DigitalElevationMap(database.Area.Size, database, rContext.DevIf, (GDALReader)dataSrcReader/*,
                                                                                                                  * hBandSampler.GenerateBitmap(new Size(512, 512),
                                                                                                                  * database.Layers[0].Areas[0])*/
                                          );
            rContext.SetDEM(dem);

            // setup geometry layers
            geometryLayers.Add(new GeometryVisLayer("Diffuse", item.Thumbnail, true));
            geometryLayers.Add(new GeometryVisLayer("Overlay Grid", null, true));

            rContext.DevIf.LocalSettings["GeometryVisLayer.Diffuse"] = geometryLayers[0];
            rContext.DevIf.LocalSettings["GeometryVisLayer.Overlay"] = geometryLayers[1];

            // now load default texture
            SetDiffuseSource(0);

            rContext.LoadingLayer.SetProgress(100);
            Render();
            Thread.Sleep(500);

            rContext.LoadingLayer.Visible = false;
            controlStatus = ControlStatus.Idle;
            Render();
        }
コード例 #5
0
 /// <summary>
 /// Initializes a new instance of the HeightBandDEMSampler class.
 /// </summary>
 /// <param name="heightBand"></param>
 public HeightBandDEMSampler(HeightBandRange heightBand)
 {
     this.heightBand = heightBand;
 }