gpt4 book ai didi

c# - 在位图上使用灰度颜色

转载 作者:太空宇宙 更新时间:2023-11-03 20:38:29 25 4
gpt4 key购买 nike

目前,当我想在位图上添加灰色时,我使用以下方法

Bitmap.SetPixel(x,y, new Color.FromArgb(100,100,100);

我的问题更多的是。它使用了一些我认为不需要的步骤:

  1. 我们有一个灰度颜色:100
  2. 我必须将它转换成真正的 RGB 颜色 (100,100,100)
  3. 然后它计算出来的是什么颜色,又是灰度 (100)

请求

有没有这样的东西

Bitmap.SetPixel(x,y, new GreyColor(100));

最佳答案

不,.NET 中没有 GreyColor 这样的东西。 GreyColor 只是一种颜色的特例,就像柠檬绿是一种颜色的特例一样。无需使模型复杂化。

一些pre-defined colors如果你能找到你要找的颜色,你就可以使用。它们只是返回一个 Color 对象,该对象具有与预定义颜色匹配的 ARGB 值,因此它们实际上与您的代码在上面所做的没有任何不同。它们的存在只是为了方便不能或不想记住不太直观的 RGB 颜色模型的程序员。

您似乎担心创建 Color 对象的潜在费用或冗余,但有几个原因说明这不应该是一个问题。您可以将 FromArgb 方法视为 Color 对象的重载构造函数:这是您创建预定义颜色以外的颜色的方式。它只是创建定义为您指定的 RGB 值的颜色对象。事实上,确实没有其他方法来表示颜色(除了 HSV 等替代颜色模型,但即使那样你也必须指定三个单独的值:0 的色调、0 的饱和度和 39 的值).我们人类可以用更抽象的方式描述颜色,但计算机并不真正理解或关心这些事情。 documentation对于 Color 结构本身,它解释说它只代表 RGB 值,以及 alpha(透明度)值。这是一个非常小的对象,包含大约 4 个字节的值。这正是您将颜色传递给 (Bitmap.SetPixel) 的方法将如何根据这些红色、绿色和蓝色值绘制颜色。

还值得指出的是,Color 是一个结构,它是一个值类型,而不是引用类型。这意味着,among other things ,它内联,无论你的变量在哪里定义。它不指向另一个对象,它位于本地堆栈而不是堆上,并且 the stack is cheap .这使得它至少比引用类型(例如类)便宜一些。

最后,如果我没有指出这种类型的微优化很少会对代码的性能产生任何影响,那我就是失职了。

简而言之,不存在这样的事情,但这没什么好担心的。

关于c# - 在位图上使用灰度颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com