GMap.NET 中的深色模式贴图

Dark mode map in GMap.NET

提问人:Digão Dalpiaz 提问时间:10/28/2023 更新时间:10/31/2023 访问量:36

问:

我正在使用 C# 和 WinForms 开发一个应用程序,并带有 GMap.NET 库。

有谁知道为地图设置黑暗模式的任何方法?

我目前正在使用 OpenStreet 地图:map.MapProvider = OpenStreetMapProvider.Instance

我查看了文档,但没有找到任何东西。使用谷歌地图时,可以在CSS中设置颜色参数,但是我没有找到直接在C#中定义CSS或主题的方法。

C# WinForms OpenStreetMap 暗模式 gmap.net

评论


答:

1赞 Jimi 10/29/2023 #1

GMap.NET 提供三种预定义的渲染模式:

  • 默认的,使用提供程序定义的颜色
  • 反转模式,将颜色设置为负 =>[GMapControl].NegativeMode
  • 灰度模式,其中所有颜色都转换为灰度;白色就是白色=>[GMapControl].GrayScaleMode

这些呈现模式使用 ColorMatrix 对象来定义每个通道的颜色量。

它还提供了指定自定义 ColorMatrix 和设置属性的方法。[GMapControl].ColorMatrix

倒矩阵是~像这样:

var matrixInverted = new ColorMatrix(new float[][] {
    new float[] { -1,  0,  0,  0,  0},
    new float[] {  0, -1,  0,  0,  0},
    new float[] {  0,  0, -1,  0,  0},
    new float[] {  0,  0,  0,  1,  0},
    new float[] {  1,  1,  1,  0,  1}
});

灰度矩阵是~这样的(我的解释):

var matrixGray = new ColorMatrix(new float[][]
{
    new float[] { .2126f, .2126f, .2126f, 0, 0 },
    new float[] { .7152f, .7152f, .7152f, 0, 0 },
    new float[] { .0722f, .0722f, .0722f, 0, 0 },
    new float[] { 0, 0, 0, 1, 0 },
    new float[] { 1, 1, 1, 0, 1 }
});

如果负模式不完全是您要找的,您可以反转灰度 ColorMatrix 的颜色:

var matrixGrayInverted = new ColorMatrix(new float[][]
{
    new float[] { -.2126f, -.2126f, -.2126f, 0, 0 },
    new float[] { -.7152f, -.7152f, -.7152f, 0, 0 },
    new float[] { -.0722f, -.0722f, -.0722f, 0, 0 },
    new float[] { 0, 0, 0, 1, 0 },
    new float[] { 1, 1, 1, 0, 1 }
});

然后设置属性:

[GMapControl].ColorMatrix = matrixGrayInverted;

关于这些矩阵的用法,请参阅以下问题中的注释:

如何将用作按钮的禁用 PictureBox 灰显?
如何使用滑块控件来调整位图的亮度?
如何使用计时器将淡入淡出过渡效果应用于图像?
替换图像的颜色