gpt4 book ai didi

.net - 以编程方式创建的拾色器图像 .NET?

转载 作者:行者123 更新时间:2023-12-04 23:45:33 25 4
gpt4 key购买 nike

是否存在任何算法来创建编程图像,然后用作颜色选择控件的基础?

如果您知道有关此主题的文档或代码的一些有用来源,欢迎他们。

编辑:我的想法是创建一个 WPF 选择器控件,我知道已经有一些用于 WPF,Sacha's one ,或来自 Microsoft Sample 的那个.这个问题的重点不是太面向我稍后将使用的技术,而是面向创建图像的算法

EDIT2:我想以编程方式在正方形中创建类似渐变图像的东西。

alt text http://patterns.holehan.org/uploads/gimp_color_chooser.png

最佳答案

这里有一些可能性:

  1. 使用重叠的线性渐变画笔创建图像。
  2. 将图像创建为位图。
  3. 在渲染过程中使用像素着色器创建图像。

重叠渐变画笔

对于您显示的图像,您可以通过使用以下方式实现所需的效果:

<Grid>
<Rectangle>
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Offset="0" Color="#FFFF8040" />
<GradientStop Offset="1" Color="#FFFFFFFF" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Rectangle>
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
<GradientStop Offset="0" Color="#FF000000" />
<GradientStop Offset="1" Color="#00000000" />
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
</Grid>

第一次填充设置颜色,第二次填充使颜色变暗。显然,这可以在绘图或 VisualBrush 中完成。

这是最简单的解决方案,但它产生的结果有限。

将图像创建为位图

使用位图可以,但与分辨率无关。您需要选择创建位图的分辨率。如果您选择的分辨率太低,质量会很差。如果您选择太高的分辨率,则会浪费资源。根据屏幕分辨率和变换自动选择分辨率虽然困难但可行:您必须订阅多个事件以检测分辨率更改并在目标上使用 TransformToDevice 以确定从 WPF 坐标到设备坐标的变换。

一旦您决定了位图的分辨率,剩下的就很简单了:

uint[] pixels = new uint[width*height];
for(int x=0; x<width; x++)
for(int y=0; y<height; y++)
pixels[y*width + x] = ComputeColor(x, y);

var bitmap = new WritableBitmap(width, height, 96, 96, PixelFormat.Pbgra32, null);
bitmap.WritePixels(new Rect(0, 0, width, height), pixels, width*4, 0);

使用像素着色器

像素着色器实际上在 GPU 内部运行,并且它们针对每个像素运行。他们已经知道目标分辨率,因此颜色计算很容易。困难在于您不能用 C# 或 VB.NET 编写算法:您必须用高级着色器语言 (HLSL) 编写它,这可能是一个重要的学习曲线。

以下是一些包含自定义着色器示例的网站:

Pixel shaders and silverlightWPF 像素着色器效果库 Interactive example

关于.net - 以编程方式创建的拾色器图像 .NET?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2357617/

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