Question

Existe-t-il un moyen de manipuler l'alpha d'une image en utilisant l'alpha d'une autre image?

Supposons que j’ai une image et que je veuille modifier son alpha de départ, opaque à gauche et totalement transparente à droite, je dessine actuellement une autre image avec LinearGradientBrush et je règle l’alpha de l’image d’origine à partir de la seconde image en boucle pixel par pixel. Y at-il une autre manière dans Gdiplus, un masque d’image ou la fusion alpha de deux images?

Conclusion: il semble qu’il n’y ait aucun moyen dans GDI + de mélanger deux images, le seul moyen semble être la méthode manuelle en parcourant des pixels.

Était-ce utile?

La solution

Je pense que vous avez raison de dire que vous devez faire ceci pixel par pixel. J'ai également cherché une solution plus "pure". façon de le faire, mais c’est ce avec quoi j’ai fini:

    public enum ChannelARGB
    {
        Blue = 0,
        Green = 1,
        Red = 2,
        Alpha = 3
    }

    public static void transferOneARGBChannelFromOneBitmapToAnother(
        Bitmap source,
        Bitmap dest,
        ChannelARGB sourceChannel,
        ChannelARGB destChannel )
    {
        if ( source.Size!=dest.Size )
            throw new ArgumentException();
        Rectangle r = new Rectangle( Point.Empty, source.Size );
        BitmapData bdSrc = source.LockBits( r, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb );
        BitmapData bdDst = dest.LockBits( r, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb );
        unsafe
        {
            byte* bpSrc = (byte*)bdSrc.Scan0.ToPointer();
            byte* bpDst = (byte*)bdDst.Scan0.ToPointer();
            bpSrc += (int)sourceChannel;
            bpDst += (int)destChannel;
            for ( int i = r.Height * r.Width; i > 0; i-- )
            {
                *bpDst = *bpSrc;
                bpSrc += 4;
                bpDst += 4;
            }
        }
        source.UnlockBits( bdSrc );
        dest.UnlockBits( bdDst );
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top