esriRasterStretch_PercentMinimumMaximum


APIないのか…

var t = Type.GetTypeFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");
IWorkspaceFactory wsf = (IWorkspaceFactory)Activator.CreateInstance(t);
var ws = (IRasterWorkspace2)wsf.OpenFromFile(extractDir, 0);
Marshal.FinalReleaseComObject(wsf);
var rasterDataset = ws.OpenRasterDataset("raster");

var layer = (IRasterLayer)new RasterLayerClass();
com.ManageLifetime(layer);
layer.CreateFromDataset(rasterDataset);

var rasterStretchColorRampRenderer = (IRasterStretchColorRampRenderer)new RasterStretchColorRampRendererClass();
com.ManageLifetime(rasterStretchColorRampRenderer);

var rasterRenderer = (IRasterRenderer)rasterStretchColorRampRenderer;
var rasterStretch = (IRasterStretch)rasterStretchColorRampRenderer;

//ストレッチタイプの指定
rasterStretch.StretchType = esriRasterStretchTypesEnum.esriRasterStretch_PercentMinimumMaximum;
rasterStretch.StandardDeviationsParam = 2;

var serializer = (IXMLSerializer)new XMLSerializerClass();
com.ManageLifetime(serializer);

var xml = serializer.SaveToString(rasterStretchColorRampRenderer, null, null);

var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
var renderNode = xmlDoc.FirstChild;

foreach (XmlNode node in renderNode.ChildNodes)
{
    if (node.Name.ToLower() == "percentclipmin")
    {
        node.InnerText = 15.ToString();
    }
    else if (node.Name.ToLower() == "percentclipmax")
    {
        node.InnerText = 5.ToString();
    }
}//end loop
//いったん文字化
xml = xmlDoc.OuterXml;

rasterStretchColorRampRenderer =
    (IRasterStretchColorRampRenderer)serializer.LoadFromString(xml, null, null);
                
layer.Renderer = (IRasterRenderer)rasterStretchColorRampRenderer;
((IRasterRendererUpdate)layer.Renderer).Update(layer);
カテゴリー: 開発 タグ: パーマリンク