• C# DEM数据转换为JPEG


    string pathToWorkspace = System.IO.Path.GetDirectoryName(fullPath);//fullPath表示DEM所在文件夹
    string demName = System.IO.Path.GetFileName(fullPath);
    IWorkspaceFactory pWSFact = new RasterWorkspaceFactoryClass();
    IWorkspace pWS = pWSFact.OpenFromFile(pathToWorkspace, 0);
    IRasterWorkspace pRasterWorkspace = pWS as IRasterWorkspace;
    IRasterLayer pRasterLayer = new RasterLayerClass();

    try
    {

    IRaster clipRaster = pRasterWorkspace.OpenRasterDataset(demName).CreateDefaultRaster();
    IRasterBandCollection pbandcollection = clipRaster as IRasterBandCollection;
    IRasterBand pband = pbandcollection.Item(0);
    IRasterStatistics pStatistics=pband.Statistics;
    int cellmax = (int)pStatistics.Maximum;
    int cellmin = (int)pStatistics.Minimum;

    IRasterProps rasterProps = clipRaster as IRasterProps;

    int dHeight = rasterProps.Height;//当前栅格数据集的行数

    int dWidth = rasterProps.Width; //当前栅格数据集的列数

    double dX = rasterProps.MeanCellSize().X; //栅格的宽度

    double dY = rasterProps.MeanCellSize().Y; //栅格的高度

    IEnvelope extent = rasterProps.Extent; //当前栅格数据集的范围

    rstPixelType pixelType = rasterProps.PixelType; //当前栅格像素类型

    IPnt pntSize = new PntClass();

    pntSize.SetCoords(dX, dY);

    IPixelBlock pixelBlock = clipRaster.CreatePixelBlock(pntSize);

    IPnt pnt = new PntClass();

    //Bitmap myjpg = new Bitmap(dWidth, dHeight,PixelFormat.Format8bppIndexed);
    Bitmap myjpg = new Bitmap(dWidth, dHeight);
    Console.WriteLine(DateTime.Now.ToString());
    for (int y = 0; y < dHeight; y++)

    for (int x = 0; x < dWidth; x++)
    {

    pnt.SetCoords(x,y );

    clipRaster.Read(pnt, pixelBlock);//就是这里的读取耗时了

    if (pixelBlock != null)
    {

    object obj = pixelBlock.GetVal(0, 0, 0);
    int rgb0 = Convert.ToInt16(obj);//这里获取的是高程值
    obj = null;
    if (rgb0 != 0)
    {
    ////高程值越大,颜色越趋向于白色
    //int rgb = 255 * (rgb0 - cellmin) / (cellmax - cellmin);
    //Color pixelColor = Color.FromArgb(rgb, rgb, rgb);
    //myjpg.SetPixel(x, y, pixelColor);


    //高程值越大,颜色越趋向于黑色
    int rgb = 255 * (cellmax - rgb0) / (cellmax - cellmin);
    Color pixelColor = Color.FromArgb(rgb, rgb, rgb);
    myjpg.SetPixel(x, y, pixelColor);
    }
    else
    {
    ////高程值越大,颜色越趋向于白色,高=0时 为黑色
    //Color pixelColor = Color.FromArgb(0, 0, 0);


    //高程值越大,颜色越趋向于黑色,高=0时 为白色
    Color pixelColor = Color.FromArgb(255, 255, 255);
    myjpg.SetPixel(x, y, pixelColor);
    }
    }

    }
    myjpg.Save(@"E:\yzdtest\data\myjpg.jpg");
    Console.WriteLine(DateTime.Now.ToString());
    MessageBox.Show("读取DEM完毕成功");
    }
    catch (Exception err)
    {
    MessageBox.Show(err.Message);

    }

    作者: 风云

    出处: http://www.cnblogs.com/fengyunlishi/

    本文版权归风云和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

    作者: 风云 出处: http://www.cnblogs.com/fengyunlishi/ 本文版权归风云和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    MyBatis代码自动生成
    英语单词--程序员专属
    动态规划小例子
    Dijkstra 算法
    矩阵变换
    (转)贝塞尔曲线
    山寨了@上位者的怜悯的样式= =
    HDU 1115 (计算多边形重心)
    HDU 1147(线段相交+链表)
    HDU 1276 (直接链表模拟)
  • 原文地址:https://www.cnblogs.com/fengyunlishi/p/3070150.html
Copyright © 2020-2023  润新知