-3
Q
HSV三角形C#
A
回答
2
using System.Drawing;
using System.Drawing.Imaging;
Image DrawColorPicker()
{
const int SIZE = 400;
var img = new Bitmap(SIZE, SIZE, PixelFormat.Format32bppArgb);
var centerX = SIZE/2;
var centerY = SIZE/2;
var innerRadius = SIZE * 5/12;
var outerRadius = SIZE/2;
for (int y = 0; y < SIZE; y++)
{
for (int x = 0; x < SIZE; x++)
{
Color color;
var distanceFromCenter = Math.Sqrt((x - centerX) * (x - centerX) + (y - centerY) * (y - centerY));
var angle = Math.Atan2(y - centerY, x - centerX) + Math.PI/2;
if (angle < 0) angle += 2 * Math.PI;
var sqrt3 = Math.Sqrt(3);
// Outside
if (distanceFromCenter > outerRadius)
{
color = Color.Transparent;
}
else if (distanceFromCenter > innerRadius)
{
// Wheel
var hue = angle;
var sat = 1.0; // Could use selected saturation and value, instead of ones
var val = 1.0;
color = HSV(hue, sat, val, 1);
}
else
{
// Inside
var x1 = (x - centerX) * 1.0/innerRadius;
var y1 = (y - centerY) * 1.0/innerRadius;
if ( 0 * x1 + 2 * y1 > 1) color = Color.Transparent;
else if (sqrt3 * x1 + (-1) * y1 > 1) color = Color.Transparent;
else if (-sqrt3 * x1 + (-1) * y1 > 1) color = Color.Transparent;
else
{
// Triangle
var hue = 0.0; // Could use the selected hue, instead of zero
var sat = (1 - 2 * y1)/(sqrt3 * x1 - y1 + 2);
var val = (sqrt3 * x1 - y1 + 2)/3;
color = HSV(hue, sat, val, 1);
}
}
img.SetPixel(x, y, color);
}
}
return img;
}
Color HSV(double hue, double sat, double val, double alpha)
{
var chroma = val * sat;
var step = Math.PI/3;
var interm = chroma * (1 - Math.Abs((hue/step) % 2.0 - 1));
var shift = val - chroma;
if (hue < 1 * step) return RGB(shift + chroma, shift + interm, shift + 0, alpha);
if (hue < 2 * step) return RGB(shift + interm, shift + chroma, shift + 0, alpha);
if (hue < 3 * step) return RGB(shift + 0, shift + chroma, shift + interm, alpha);
if (hue < 4 * step) return RGB(shift + 0, shift + interm, shift + chroma, alpha);
if (hue < 5 * step) return RGB(shift + interm, shift + 0, shift + chroma, alpha);
return RGB(shift + chroma, shift + 0, shift + interm, alpha);
}
Color RGB(double red, double green, double blue, double alpha)
{
return Color.FromArgb(
Math.Min(255, (int)(alpha * 256)),
Math.Min(255, (int)(red * 256)),
Math.Min(255, (int)(green * 256)),
Math.Min(255, (int)(blue * 256)));
}
结果:
+0
这有效,谢谢你! –
相关问题
- 1. 多边形三角形c#
- 2. 在三角形的三角形中绘制三角形
- 3. 三角形的反转[c]
- 4. C中的Pascal三角形
- 5. Sierpinski三角形调试--- C
- 6. 获取三角形内的三角形?
- 7. 三角形中的三角形CSS
- 8. C#填充多边形(三角形)
- 9. 三角形
- 10. “三角形”VS2012?
- 11. 非三角形输入输出角度非右三角形
- 12. 3D三角形 - 三角形交叉点多边形
- 13. opengl中的三角形多边形三角形es
- 14. 触发三角形角度
- 15. shaperenderer圆角三角形
- 16. 直角三角形实施
- 17. java直角三角形
- 18. 边框角落:三角形
- 19. osmdroid多边形 - 三角形
- 20. CSS3菱形到三角形
- 21. 三角形波形verilog
- 22. C#程序打印数字三角形?
- 23. C#另一个正三角形
- 24. 三角形C++边缘计算
- 25. C中的三角形x的项目
- 26. C中的指针三角形#
- 27. C++包围盒三角形碰撞
- 28. 与数字c#三角形嵌套
- 29. C + +循环(三角形抽屉)
- 30. 剪切线为三角形C++
大概['DrawImage'](https://msdn.microsoft.com/en-us/library/558kfzex)应该足够了。 –
您可以预先制作一个半透明的三角形,然后在纯色上绘制。 –
你有没有尝试过任何这个呢?如果是的话请添加你的代码.. – Darshak