Frage

Gibt es eine Möglichkeit alpha ein Bild unter Verwendung von Alpha aus einem anderen Bild zu manipulieren?

Angenommen ich ein Bild haben, und ich möchte auf der linken Seite seiner alpha Start undurchsichtig verändern und völlig transparent in Ordnung, ich derzeit ein weiteres Bild mit LinearGradientBrush und setzen Alpha von orginal Bild von dem zweiten Bild zeichnen, indem Pixel für Pixel Looping, gibt es eine andere Art und Weise in Gdiplus, einige Bildmaske oder Blending alpha von zwei Bildern?

. Fazit: es scheint, dass es keine Möglichkeit gibt, in GDI + zwei Bilder zu mischen, scheint nur so die manuelle Art und Weise zu sein, indem durch Pixel iteriert

War es hilfreich?

Lösung

Ich glaube, Sie in dem korrekt sind Sie diese Pixel-für-Pixel zu tun haben. Ich habe auch für eine „reine“ Art und Weise durchsucht, es zu tun, aber das ist, was ich am Ende mit:

    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 );
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top