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

有没有人知道怎么把 map 上的dark mode设定下来?

我目前使用的是OpenStreet map : map.MapProvider = OpenStreetMapProvider.Instance

我看了文件,但什么也没找到.在使用Google map时,可以在css中设置 colored颜色 参数,但我没有找到直接用C#定义css或主题的方法.

推荐答案

GMap.NET提供了三种预定义的呈现模式:

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

这些渲染模式使用ColorMatrix对象来定义每个通道的 colored颜色 量.

它还提供了通过设置[GMapControl].ColorMatrix属性来指定自定义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的 colored颜色 :

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;

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

How can I gray-out a disabled PictureBox used as Button?
How to use a slider control to adjust the brightness of a Bitmap?
How to apply a fade transition effect to Images using a Timer?
Replacing colour of an Image

Csharp相关问答推荐

在Dapper中使用IasyncEum重写GetAsyncEum方法

不仅仅是一个简单的自定义按钮

图形API基于appid列表检索多个应用程序

与C#中的Zip列表并行

将轮询与超时同步

Rider将.NET安装在哪里

如何使用NumberFormatInfo

在C#中,将两个哈希集连接在一起的时间复杂度是多少?

显示文档的ECDsa签名PDF在Adobe Reader中签名后已被更改或损坏

无法将生产环境的AppDbContext设置替换为用于集成测试的内存数据库

如何将%{v_扩展}转换为%{v_扩展}>>

.NET8Blazor-为什么Rapzor渲染在for循环之后显示?

C#System.Commandline:如何向命令添加参数以便向其传递值?

如何在.NET Core 8中自定义标识用户模型

无法使用直接URL通过PictureBox.ImageLocation加载图像

读取测试项目中的应用程序设置

如何根据分割文本的块数来计算文本的大小?

如何对构建在Clean架构和CQRS之上的控制器进行单元测试?

从列表中跳过和获取条目的优雅方式

ASP.NET文件上传不接受超过10MB的文件