Exemple #1
0
        internal static GlowBitmap Create(GlowDrawingContext drawingContext, GlowBitmapPart bitmapPart, Color color)
        {
            var orCreateAlphaMask =
                GetOrCreateAlphaMask(bitmapPart);

            var glowBitmap =
                new GlowBitmap(
                    drawingContext.ScreenDC,
                    orCreateAlphaMask.Width,
                    orCreateAlphaMask.Height);

            for (var i = 0; i < orCreateAlphaMask.DIBits.Length; i += BytesPerPixelBgra32)
            {
                var b    = orCreateAlphaMask.DIBits[i + 3];
                var val  = PremultiplyAlpha(color.R, b);
                var val2 = PremultiplyAlpha(color.G, b);
                var val3 = PremultiplyAlpha(color.B, b);
                Marshal.WriteByte(glowBitmap.DIBits, i, val3);
                Marshal.WriteByte(glowBitmap.DIBits, i + 1, val2);
                Marshal.WriteByte(glowBitmap.DIBits, i + 2, val);
                Marshal.WriteByte(glowBitmap.DIBits, i + 3, b);
            }

            return(glowBitmap);
        }
 internal GlowDrawingContext(int width, int height)
 {
     ScreenDC = InteropMethods.GetDC(IntPtr.Zero);
     if (ScreenDC == IntPtr.Zero)
     {
         return;
     }
     WindowDC = InteropMethods.CreateCompatibleDC(ScreenDC);
     if (WindowDC == IntPtr.Zero)
     {
         return;
     }
     BackgroundDC = InteropMethods.CreateCompatibleDC(ScreenDC);
     if (BackgroundDC == IntPtr.Zero)
     {
         return;
     }
     Blend.BlendOp             = 0;
     Blend.BlendFlags          = 0;
     Blend.SourceConstantAlpha = 255;
     Blend.AlphaFormat         = 1;
     _windowBitmap             = new GlowBitmap(ScreenDC, width, height);
     InteropMethods.SelectObject(WindowDC, _windowBitmap.Handle);
 }