Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 消除边界效应_C#_Graphics_Directx_Sharpdx - Fatal编程技术网

C# 消除边界效应

C# 消除边界效应,c#,graphics,directx,sharpdx,C#,Graphics,Directx,Sharpdx,这是一个工作项目。我使用SharpDX(DirectX层)继承了一些代码。我的任务之一是修复一段代码,其中某些图像效果应用于包含填充的几何形状。如果过滤器应用于填充本身,则它不符合边。我已经找到了使用对象的几何体提取摘录的代码。出于各种原因,他们希望保持形状外部的填充(即,我们有一些扭曲效果,将像素拉入形状外部),因此我需要将其覆盖在背景上。我遇到的问题是我得到了这个单像素边框 将软边过滤器应用于可见部分 裁剪形状的背景 这两者在程序中合成在一起 我实际得到的 我不能分享一段好的代码,因

这是一个工作项目。我使用SharpDX(DirectX层)继承了一些代码。我的任务之一是修复一段代码,其中某些图像效果应用于包含填充的几何形状。如果过滤器应用于填充本身,则它不符合边。我已经找到了使用对象的几何体提取摘录的代码。出于各种原因,他们希望保持形状外部的填充(即,我们有一些扭曲效果,将像素拉入形状外部),因此我需要将其覆盖在背景上。我遇到的问题是我得到了这个单像素边框

将软边过滤器应用于可见部分

裁剪形状的背景

这两者在程序中合成在一起

我实际得到的

我不能分享一段好的代码,因为部分代码是专有的,但是掩码是一个字节数组。我使用以下代码构建它:

SingleChannelBitmap mask = new SingleChannelBitmap(MaxRequiredPixels.Width, MaxRequiredPixels.Height, 255);
mask.FillShape(new RectangleF(new PointF(0,0), mask.Size), this.Geometry, 0);
255是最大Alpha值(透明)。我将其反转以从背景中取出切片。我唯一能想到的是,当我做掩蔽时,它不包括几何体的外边缘。我将尝试以最粗糙的方式将遮罩扩展一个像素(基本上,扫描并获取任何透明度为0的内容,并在左、右、上和下添加一个透明度为0的像素),但我知道必须有一个更优雅的解决方案


这也适用于3D Edge斜面过滤器,因此任意大的空白可能对我也不起作用。

您所描述的基本上与显示PNG图像时出现的光晕问题相同。来自多个程序的PNG导出过程将为PNG中alpha为零的任何部分存储纯色,而不是这些像素处的实际颜色。这使得它们的功能与其他图像格式(GIF)类似,后者使用特定的颜色对透明像素进行编码。这会显著减小文件的大小,但是,在对图像进行采样时可能会导致问题

你的情况是相似的。尽管遮罩像素的alpha为零,但在进行双线性采样时,可以在像素之间进行采样,混合颜色和alpha值(除非像素和纹理中心完全对齐)。例如,如果在0%alpha红色像素旁边有一个100%alpha白色像素,并且在两者之间进行采样,则结果将是一个50%alpha的粉红色像素

有几种可能的解决方案:

  • 可以扩展颜色层的边界,使0%alpha边界与其非0%alpha相邻像素具有相同的颜色
  • 有意地排列像素和纹理中心,尽管这可能很棘手和/或不可能,这取决于您的要求(主要取决于分辨率)
  • 显示图像时使用“最近”采样,而不是双线性采样。这样,您将永远不会混合在0%alpha像素中。但是,这也可能不可取,因为您的图像可能会显示更多的锯齿效果

您正在做的事情太不清楚了。如果您不能包含代码,那么可能需要对您的操作进行正式描述?