导览
利用C#写一个简单点云软件2
01
颜色
RGB
常用的一种颜色格式,RGB分别代表红,绿和蓝。RGB值的变化代表了颜色的变化。
HSV
常用的另一种颜色格式,HSV分别代表色调,饱和度和亮度。
RGB和HSV的区别
RGB和HSV都可以用来表示不同颜色,并且相互转换。HSV中可以用一个H值变化用以切换不同颜色,但是在RGB中必须三个值变化才能切换颜色。颜色更多信息请搜索RGB和HSV。
从颜色到点云
我们可以把距离范围映射到颜色范围上(RGB→Distance),用C#制作一个函数来表达这种关系。刚刚说过,HSV的颜色格式可以用一个H值来代表整个颜色区域值,所以用HSV是比较简单。
02
C# 代码
色调函数HSV
private Color Color_HSV(double measurevalue, double max_value, double min_value)
{
Color color_rpg = Color.FromArgb(0, 0, 0);
measurevalue = measurevalue - min_value;
max_value = max_value - min_value;
ColorHSV hSV = new ColorHSV((int)((measurevalue/max_value)*360), 200, 200);
color_rpg= ColorHelper.HsvToRgb(hSV).GetColor();
return color_rpg;
}
这里我用了一个网上的颜色类,因为本身C#是没有HSV这个颜色类以及相关函数的。可以自行网上搜或者等待我放出源工程。
色调函数RGB
private Color ColorRGB(double measurevalue, double max_value, double min_value)
{
int color;
Color color_rpg = Color.FromArgb(0, 0, 0);
measurevalue = measurevalue - min_value;
max_value = max_value - min_value;
if (measurevalue / max_value <= 0.15)
{
color = (int)((measurevalue / max_value) / 0.15 * 255);
if (color <= 0)
{
color = 0;
}
color_rpg = Color.FromArgb(0, 0, color);
return color_rpg;
}
//...
return color_rpg;
}
Bitmap相关
private void aSCToolStripMenuItem_Click(object sender, EventArgs e)
{
bitmap = new Bitmap(FileOpt.datamat.GetLength(0), FileOpt.datamat.GetLength(1));
for (int y = 0; y < FileOpt.datamat.GetLength(1); y++)
{
for (int x = 0; x < FileOpt.datamat.GetLength(0); x++)
{
bitmap.SetPixel(x, y, Color_HSV(FileOpt.datamat[x, y], FileOpt.maxv, 0));
}
}
pictureBox1.Image = bitmap;
FileOpt.datamat_buffer = FileOpt.datamat;
}
效果图
3D演示
小结
1. HSV与RBG都可以显示,效果略有不同,实际操作可以进行优化
2. 显示图片