gpt4 book ai didi

c# - 如何获取一维数组的 "edges"

转载 作者:行者123 更新时间:2023-11-30 21:36:24 24 4
gpt4 key购买 nike

解释

我正在为在纹理边缘具有单个像素轮廓的 UI 元素生成纹理。

在纹理中设置颜色数据的方法仅限于传递一维颜色值数组。

这些纹理是二维的,所以它们基本上是矩形的。我需要能够识别当前像素何时处于边缘。这就是我目前的做法:

Color[] colorData = new Color[width * height];
for (int p = 0; p < colorData.Length; p++) {

//Top
if (p < width - 1) {

colorData[p] = DefaultOutlineColor;
}
//Left
else if(p % width == 0) {
colorData[p] = DefaultOutlineColor;
}
//Right
else if(p % height == height - outlineWidth) {
colorData[p] = DefaultOutlineColor;
}
//Bottom
else if(p >= width * (height - outlineWidth)) {
colorData[p] = DefaultOutlineColor;
}
//Fill
else {
colorData[p] = DefaultBaseColor;
}
}

问题

一些模数数学等等。我遇到的问题是纹理的右侧。更具体地计算右侧边缘。一图胜千言:

UI Texture

我知道这只是右边缘部分的计算错误。但我不知道如何让它发挥作用。任何帮助将不胜感激。

编辑:弄清楚了。这是工作代码:

        //Fill
for (int p = 0; p < colorData.Length; p++) {

colorData[p] = DefaultBaseColor;
}

//Top
for (int p = 0; width * outlineWidth > p; p++) {

colorData[p] = DefaultOutlineColor;
}

//Left and Right
for (int p = 1; height > p; p++) {

for (int i = 0; i < outlineWidth; i++) {

colorData[(p * width) + i] = DefaultOutlineColor; //Left
colorData[((p * width) - i) - 1] = DefaultOutlineColor; //Right
}

}

//Bottom
for (int p = width * height - (width * outlineWidth); colorData.Length > p; p++) {

colorData[p] = DefaultOutlineColor;
}

最佳答案

为什么不分三个循环呢?一个在上面,一个在左边,一个在右边,然后一个在下面?这样您就可以跳过所有根本不需要触摸的项目。

for(int ndx = 0; Width > ndx; ++ndx)
{
colorData[ndx] = DefaultOutlineColor;
}

for(int ndx = 1; Height > ndx; ++ndx)
{
colorDatandx * Widthp] = DefaultOutlineColor;
colorData[ndx*Width + Width] = DefaultOutlineColor;}
}

for(int ndx = Width * Height - Width; Length > ndx; ++ndx)
{
colorDatandxp] = DefaultOutlineColor;
}

关于c# - 如何获取一维数组的 "edges",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48236981/

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