Ceci est un projet de travail. J'ai hérité du code en utilisant SharpDX (une couche DirectX). Une de mes tâches consiste à corriger un morceau de code où certains effets d'image s'appliquent à une forme géométrique contenant un remplissage. Si le filtre est appliqué au remplissage, il ne correspond pas aux bords. J'ai trouvé le code pour extraire un extrait en utilisant la géométrie de l'objet. Pour diverses raisons, ils veulent conserver le remplissage qui existe en dehors de la forme (à savoir, nous avons des effets de distorsion qui tirent les pixels en dehors de la forme), donc j'ai besoin de superposer le tout sur l'arrière-plan. Le problème que je suis en cours d'exécution en est que je reçois cette frontière unique pixel ...Elimination d'un effet de bordure
L'application du filtre Soft Edge à la partie visible
L'arrière-plan avec la coupe de forme sur
les deux composited ensemble dans le programme
Je ne peux pas partager une bonne partie du code, en raison de certaines parties étant propriétaire, mais le masque est un tableau d'octets. Je le construis en utilisant le code suivant:
SingleChannelBitmap mask = new SingleChannelBitmap(MaxRequiredPixels.Width, MaxRequiredPixels.Height, 255);
mask.FillShape(new RectangleF(new PointF(0,0), mask.Size), this.Geometry, 0);
255 est la valeur Alpha maximum (transparent). Je l'inverse pour enlever la tranche de l'arrière-plan. La seule chose à laquelle je peux penser est que, quand je fais le masquage, cela n'inclut pas le bord extérieur de la géométrie. Je vais essayer d'agrandir le masque d'un pixel de la manière la plus crue possible (essentiellement, en scannant et en prenant tout ce qui est 0 transparence et en ajoutant un pixel transparent 0 à gauche, droite, haut et bas), mais je sais il doit y avoir une solution plus élégante.
Cela doit également fonctionner pour le filtre de biseautage Edge 3D, donc faire un espace arbitrairement grand ne fonctionnera probablement pas pour moi non plus.
Il est trop difficile de savoir ce que vous faites. Si vous ne pouvez pas inclure de code, alors peut-être une description formelle de vos opérations? –