【问题标题】:Convert GTK# Color to System.Drawing.Color将 GTK# 颜色转换为 System.Drawing.Color
【发布时间】:2014-12-18 07:33:57
【问题描述】:

我正在尝试将从 GTk# 颜色对话框中选择的颜色转换为 system.Drawing.Color。 我试过System.Drawing.Color.fromargb(mygtkcolor.Red,mygtkColor.Green,mygtkColor.Blue);

mygtkColor 类是http://docs.go-mono.com/?link=T%3aGdk.Color

但它显示一个错误,说颜色分量的值应该小于 255。

也试过System.Drawing.ColorTranslator.fromHtml(mygtkColor.getHashValue().ToString());

这次没有错误但是显示的颜色不正确。

我做错了什么?

【问题讨论】:

  • mygtkcolor的类型全称是什么?
  • 我不熟悉 GTK,但它的颜色边界是多少(即 255)?您要么需要使用min(x, 255),要么将其转换为 255 (x/maxcolor * 255) 中的表示形式
  • 如果是developer.gnome.org/pygtk/stable/class-gdkcolor.html,mygtkcolor.Red / 65535 * 255,我想。
  • @U2744SNOWFLAKE 它的docs.go-mono.com/?link=T%3aGdk.Color.I 认为你链接的那个是一样的。
  • @Sayse 就像我得到了 mygtkcolor.Red 的值 27091。所以错误是“红色”应该 >= 0 和

标签: c# colors mono gtk gtk#


【解决方案1】:

如果 U2744SNOWFLAKE 希望在这方面添加答案,那么我很乐意删除,

基本上你需要做的是将你的数字转换成一个等于255而不是65535的分数

此时你有27091/65535。

除以这个分数,你得到它的等效小数,把它乘以 255,你就得到了 255 的分数

因此

(colorValue / 65535.0) * 255

这可能需要转换成整数

IDEONE example

【讨论】:

  • 谢谢,但不起作用,也尝试将浮点数转换为 int。显示错误的颜色
  • @techno - 你已经为颜色的所有三个元素都做了这个?是不是很遥远?请记住,范围较小的颜色范围会更小 - 作为辅助检查,您可以反转检查以查看您收到的数字 (num/255.0 * 65535)
  • 是的 ccolor = System.Drawing.Color.FromArgb ((int)tempcolor.Red/65535*255, (int)tempcolor.Green/65535*255,(int) tempcolor.Blue/65535* 255);
  • @techno - 进行整数除法,请参阅我的答案中的代码行,您需要除以浮点数/双精度数,否则我想这只是 (0, 0, 0)
  • 非常感谢。试过这个 double r = (tempcolor.Red / 65535.0) * 255;双 g=(tempcolor.Green/65535.0)*255;双 b=(tempcolor.Blue/65535.0)*255; ccolor = System.Drawing.Color.FromArgb ((int)r, (int)g,(int) b);它有效:)
猜你喜欢
  • 1970-01-01
  • 2011-06-04
  • 2016-02-19
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 2019-02-08
相关资源
最近更新 更多