private void Vector2Bitmap(ShapePolygon shapePolygon) { //矢量转成位图 Dictionary <ShapePolygon, Color> vectors = new Dictionary <ShapePolygon, Color>(); vectors.Add(shapePolygon, Color.Red); IVector2BitmapConverter c = new Vector2BitmapConverter(); int width = (int)(shapePolygon.Envelope.Width / 0.1f); int height = (int)(shapePolygon.Envelope.Height / 0.1f); Size size = new System.Drawing.Size(width, height); Bitmap buffer = new Bitmap(size.Width, size.Height, PixelFormat.Format24bppRgb); c.ToBitmap(vectors, Color.White, shapePolygon.Envelope, size, ref buffer); buffer.Save("f:\\1.bmp", ImageFormat.Bmp); //位图转成栅格索引 Bitmap2RasterConverter b2r = new Bitmap2RasterConverter(); int[] idxs = b2r.ToRaster(buffer, Color.Red); //栅格索引转成位图 BinaryBitmapBuilder b = new BinaryBitmapBuilder(); buffer = b.CreateBinaryBitmap(size, Color.Red, Color.White); b.Fill(idxs, size, ref buffer); buffer.Save("f:\\2.bmp", ImageFormat.Bmp); }
private void DisplayIndexResult(IMonitoringSubProduct subProduct, string name, IPixelIndexMapper pixelIndexMapper, IRasterDataProvider dataProvider) { ICanvasViewer cv = _session.SmartWindowManager.ActiveCanvasViewer; if (cv == null) { return; } using (IBinaryBitmapBuilder builder = new BinaryBitmapBuilder()) { Size bmSize = new Size(dataProvider.Width, dataProvider.Height); Color productColor = GetBinaryColor(subProduct); Bitmap bitmap = builder.CreateBinaryBitmap(bmSize, productColor, Color.Transparent); int[] indexes = pixelIndexMapper.Indexes.ToArray(); builder.Fill(indexes, new Size(dataProvider.Width, dataProvider.Height), ref bitmap); // IBinaryBitampLayer layer = cv.Canvas.LayerContainer.GetByName(name) as IBinaryBitampLayer; if (layer == null) { layer = new BinaryBitmapLayer(name, bitmap, GetCoordEnvelope(dataProvider), dataProvider.CoordType == enumCoordType.GeoCoord); cv.Canvas.LayerContainer.Layers.Add(layer); } else { layer.Bitmap = bitmap; } cv.Canvas.Refresh(Core.DrawEngine.enumRefreshType.All); } }
private void CreatBitmap(IRasterDataProvider prd, int[] idxs, string saveName) { IBinaryBitmapBuilder builder = new BinaryBitmapBuilder(); Size bmSize = new Size(prd.Width / 2, prd.Height / 2); Bitmap bitmap = builder.CreateBinaryBitmap(bmSize, Color.Red, Color.White); builder.Fill(idxs, new Size(prd.Width, prd.Height), ref bitmap); bitmap.Save(saveName, ImageFormat.Png); }
private void button13_Click(object sender, EventArgs e) { //构造参数提供者 string fname = @"f:\\FY3A_Mersi_2010_06_24_10_00_1000M_L1B_PRJ_Whole.LDF"; fname = @"F:\MERSI\评审火情用\EI2040714.ldf"; Dictionary <string, object> args = new Dictionary <string, object>(); args.Add("a", 315); IRasterDataProvider prd = GeoDataDriver.Open(fname) as IRasterDataProvider; ArgumentProvider argprd = new ArgumentProvider(prd, args); //构造判识表达式 string express = "(band3 / 10f > var_a)"; int[] bandNos = new int[] { 3 }; //构造基于阈值的判识器 IThresholdExtracter <UInt16> extracter = new SimpleThresholdExtracter <UInt16>(); extracter.Reset(argprd, bandNos, express); //判识 //result = PixelIndexMapperFactory.CreatePixelIndexMapper("Fire",prd.Width,prd.Height); //Stopwatch sw = new Stopwatch(); //sw.Start(); //extracter.Extract(result); //idxs = result.Indexes.ToArray(); //sw.Stop(); //Text = sw.ElapsedMilliseconds.ToString(); //判识结果生成二值位图 IBinaryBitmapBuilder builder = new BinaryBitmapBuilder(); Size bmSize = new Size(prd.Width, prd.Height); Bitmap bitmap = builder.CreateBinaryBitmap(bmSize, Color.Red, Color.Transparent); builder.Fill(idxs, new Size(prd.Width, prd.Height), ref bitmap); bitmap.Save("f:\\1.png", ImageFormat.Png); //判识结果永久保存 RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "FIR"; id.SubProductIdentify = "2VAL"; id.Satellite = "FY3A"; id.Sensor = "MERSI"; id.Resolution = "250M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); iir.Put(idxs, 1); iir.Dispose(); //sw.Stop(); //Text = sw.ElapsedMilliseconds.ToString(); }
private void UpdateLayer(ResultObject resultObject) { IPixelIndexMapper binaryValues = resultObject.BinaryValues; IBinaryBitampLayer binaryLayer = resultObject.BinaryLayer; Bitmap bitmap = binaryLayer.Bitmap; using (IBinaryBitmapBuilder builder = new BinaryBitmapBuilder()) { builder.Reset(bitmap.Size, ref bitmap); builder.Fill(binaryValues.Indexes.ToArray(), bitmap.Size, ref bitmap); } _canvasViewer.Canvas.Refresh(enumRefreshType.All); }
private void SandExtructTest(string fname, Dictionary <string, object> args, string express, int[] bandNos, string saveName) { //构造参数提供者 IRasterDataProvider prd = GeoDataDriver.Open(fname) as IRasterDataProvider; ArgumentProvider argprd = new ArgumentProvider(prd, args); //构造判识表达式 //构造基于阈值的判识器 IThresholdExtracter <UInt16> extracter = new SimpleThresholdExtracter <UInt16>(); extracter.Reset(argprd, bandNos, express); //判识 result = PixelIndexMapperFactory.CreatePixelIndexMapper("DST", prd.Width, prd.Height, prd.CoordEnvelope, prd.SpatialRef); Stopwatch sw = new Stopwatch(); sw.Start(); extracter.Extract(result); idxs = result.Indexes.ToArray(); sw.Stop(); Text = sw.ElapsedMilliseconds.ToString(); //判识结果生成二值位图 IBinaryBitmapBuilder builder = new BinaryBitmapBuilder(); Size bmSize = new Size(prd.Width / 2, prd.Height / 2); Bitmap bitmap = builder.CreateBinaryBitmap(bmSize, Color.Red, Color.White); builder.Fill(idxs, new Size(prd.Width, prd.Height), ref bitmap); bitmap.Save(saveName, ImageFormat.Png); //判识结果永久保存 RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "SANDDUST"; id.SubProductIdentify = "2VAL"; id.Satellite = "FY3A"; id.Sensor = "MERSI"; id.Resolution = "1000M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); iir.Put(idxs, 1); iir.Dispose(); }
private IBinaryBitampLayer GetBinaryLayer(ICanvasViewer cv, IRasterDataProvider dataProvider, IMonitoringProduct product, IMonitoringSubProduct subProduct) { string name = GetName(product, subProduct); Size bmSize = new Size(dataProvider.Width, dataProvider.Height); Color productColor = GetBinaryColor(subProduct); using (IBinaryBitmapBuilder builder = new BinaryBitmapBuilder()) { Bitmap bitmap = builder.CreateBinaryBitmap(bmSize, productColor, Color.Transparent); IBinaryBitampLayer layer = cv.Canvas.LayerContainer.GetByName(name) as IBinaryBitampLayer; if (layer != null) { cv.Canvas.LayerContainer.Layers.Remove(layer); layer.Dispose(); } layer = new BinaryBitmapLayer(name, bitmap, GetCoordEnvelope(dataProvider), dataProvider.CoordType == enumCoordType.GeoCoord); cv.Canvas.LayerContainer.Layers.Add(layer); return(layer); } }
private void button16_Click(object sender, EventArgs e) { using (VectorAOITemplate v = VectorAOITemplateFactory.GetAOITemplate("贝尔湖")) //贝尔湖 { Size size; IRasterDataProvider prd; Envelope evp = GetEnvelope(out size, out prd); Stopwatch sw = new Stopwatch(); sw.Start(); aoi = v.GetAOI(evp, size); // int[] reverseAOI = AOIHelper.Reverse(aoi, size); IBinaryBitmapBuilder b = new BinaryBitmapBuilder(); Bitmap bm = b.CreateBinaryBitmap(size, Color.Red, Color.Black); b.Fill(reverseAOI, size, ref bm); // string express = "NDVI(band1,band2)"; int[] bandNos = new int[] { 1, 2 }; //构造栅格计算判识器 ArgumentProvider argprd = new ArgumentProvider(prd, null); argprd.AOI = aoi; IRasterExtracter <UInt16, float> extracter = new SimpleRasterExtracter <UInt16, float>(); extracter.Reset(argprd, bandNos, express); //判识 resultNDVI = new MemPixelFeatureMapper <float>("NDVI", 1000, new Size(prd.Width, prd.Height), prd.CoordEnvelope, prd.SpatialRef); extracter.Extract(resultNDVI); // RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "FIR"; id.SubProductIdentify = "NDVI"; id.Satellite = "FY3A"; id.Sensor = "MERSI"; id.Resolution = "250M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <float> iir = new InterestedRaster <float>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); iir.Put(resultNDVI); iir.Dispose(); } }
private void 海陆模板_Click(object sender, EventArgs e) { using (VectorAOITemplate v = VectorAOITemplateFactory.GetAOITemplate("海陆模版")) //贝尔湖 { Size size; IRasterDataProvider prd; Envelope evp = GetEnvelope(out size, out prd); Stopwatch sw = new Stopwatch(); sw.Start(); landAoi = v.GetAOI(evp, size); // int[] reverseAOI = AOIHelper.Reverse(landAoi, size); //IBinaryBitmapBuilder b = new BinaryBitmapBuilder(); //Bitmap bm = b.CreateBinaryBitmap(size, Color.Red, Color.Black); //b.Fill(reverseAOI, size, ref bm); //对陆地区域使用陆地判识算法 Dictionary <string, object> args = new Dictionary <string, object>(); //args.Add("a", 28); //args.Add("b", 78); //args.Add("c", 245); //args.Add("d", 293); //args.Add("f", 28); //args.Add("g", 0); //args.Add("h", 15); //args.Add("i", 250); //构造判识表达式 //string express = "((band2/10f) > var_a) && (band2/10f < var_b) && (band5/10f > var_c) && (band5/10f < var_d) && " // + "(band6/10f > var_f) && ((band6 - band2)>var_g) && ((band6/10f - band5/10f + var_i)>var_h)"; ////band2:可见光,0.525~0.575(波长范围) ////band5:远红外,10.3~11.55 ////band6:短波红外,1.60~1.69 //int[] bandNos = new int[] { 2, 5, 6 }; ////构造栅格计算判识器 //ArgumentsProvider argprd = new ArgumentsProvider(prd, args); //argprd.AOI = reverseAOI; //IThresholdExtracter<UInt16> extracter = new SimpleThresholdExtracter<UInt16>(); //extracter.Reset(argprd, bandNos, express); ////判识 //landResult = new MemPixelIndexMapper("SAND", 1000); //extracter.Extract(landResult); //landInd = landResult.Indexes.ToArray(); //对海洋区域使用海洋判识算法 args.Clear(); args.Add("a", 8); args.Add("b", 26); args.Add("c", 265); args.Add("d", 283); args.Add("e", -10); args.Add("f", 0); string express = "(band2/10f > var_a) && (band2/10f < var_b) && (band5/10f > var_c) && (band5/10f < var_d) && " + "(band6/10f > var_a)&& ((band6/10f - band4/10f)>var_e) &&((band2/10f - band4/10f )>var_f)"; int[] bandNos = new int[] { 2, 5, 6, 4 }; ArgumentProvider argprd = new ArgumentProvider(prd, args); argprd.AOI = reverseAOI; IThresholdExtracter <UInt16> extracter = new SimpleThresholdExtracter <UInt16>(); extracter.Reset(argprd, bandNos, express); //判识 seaResult = PixelIndexMapperFactory.CreatePixelIndexMapper("DST", prd.Width, prd.Height, prd.CoordEnvelope, prd.SpatialRef); extracter.Extract(seaResult); seaIdx = seaResult.Indexes.ToArray(); // IBinaryBitmapBuilder builder = new BinaryBitmapBuilder(); Size bmSize = new Size(prd.Width / 2, prd.Height / 2); Bitmap bitmap = builder.CreateBinaryBitmap(bmSize, Color.Red, Color.White); builder.Fill(landInd, new Size(prd.Width, prd.Height), ref bitmap); bitmap.Save("h:\\陆地沙尘.png", ImageFormat.Png); builder.Fill(seaIdx, new Size(prd.Width, prd.Height), ref bitmap); bitmap.Save("h:\\海洋沙尘.png", ImageFormat.Png); // RasterIdentify id = new RasterIdentify(); id.ThemeIdentify = "CMA"; id.ProductIdentify = "SAND"; id.SubProductIdentify = "2VAL"; id.Satellite = "FY3A"; id.Sensor = "MERSI"; id.Resolution = "1000M"; id.OrbitDateTime = DateTime.Now.Subtract(new TimeSpan(1, 0, 0, 0, 0)); id.GenerateDateTime = DateTime.Now; IInterestedRaster <UInt16> iir = new InterestedRaster <UInt16>(id, new Size(prd.Width, prd.Height), prd.CoordEnvelope.Clone()); iir.Put(landInd, 1); iir.Put(seaIdx, 1); sw.Stop(); Text = sw.ElapsedMilliseconds.ToString(); iir.Dispose(); } ////取海洋矢量作为AOI,使用海洋的判识算法 //Dictionary<string, object> seaargs = new Dictionary<string, object>(); //seaargs.Add("sa", 8); //seaargs.Add("sb", 26); //seaargs.Add("sc", 265); //seaargs.Add("sd", 283); //seaargs.Add("se", -10); //seaargs.Add("sf", 0); //string seaExpress = "(band2/10f > var_sa) && (band2/10f < var_sb) && (band5/10f > var_sc) && (band5/10f < var_sd) && " // + "(band6/10f > var_sa)&& ((band6/10f - band4/10f)>var_se) &&((band2/10f - band4/10f )>var_sf)"; //int[] seabandNos = new int[] { 2, 5, 6, 4 }; //ArgumentsProvider seaargprd = new ArgumentsProvider(prd, seaargs); ////构造判识表达式 ////构造基于阈值的判识器 //IThresholdExtracter<UInt16> seaextracter = new SimpleThresholdExtracter<UInt16>(); //seaextracter.Reset(seaargprd, seabandNos, seaExpress); ////判识 //IPixelIndexMapper searesult = new MemPixelIndexMapper("SAND", 1000); //seaextracter.Extract(searesult); //int[] seaidxs = searesult.Indexes.ToArray(); //将两者判识的idex合并 }