Vanara/PInvoke/Gdi32/WinGdi.BLENDFUNCTION.cs

59 lines
2.7 KiB
C#

using System.Runtime.InteropServices;
namespace Vanara.PInvoke
{
public static partial class Gdi32
{
/// <summary>
/// The BLENDFUNCTION structure controls blending by specifying the blending functions for source and destination bitmaps.
/// </summary>
/// <remarks>See information on how this function determines the resulting values on <a href="https://msdn.microsoft.com/en-us/library/dd183393(v=vs.85).aspx">MSDN</a>.</remarks>
[StructLayout(LayoutKind.Sequential)]
[PInvokeData("Wingdi.h", MSDNShortId = "dd183393")]
public struct BLENDFUNCTION
{
/// <summary>
/// The source blend operation. Currently, the only source and destination blend operation that has been defined is AC_SRC_OVER. For details, see the
/// following Remarks section.
/// </summary>
public byte BlendOp;
/// <summary>Must be zero.</summary>
public byte BlendFlags;
/// <summary>
/// Specifies an alpha transparency value to be used on the entire source bitmap. The SourceConstantAlpha value is combined with any per-pixel alpha
/// values in the source bitmap. If you set SourceConstantAlpha to 0, it is assumed that your image is transparent. Set the SourceConstantAlpha value
/// to 255 (opaque) when you only want to use per-pixel alpha values.
/// </summary>
public byte SourceConstantAlpha;
/// <summary>
/// This member controls the way the source and destination bitmaps are interpreted. AlphaFormat has the following value.
/// <para>
/// <c>AC_SRC_ALPHA</c> This flag is set when the bitmap has an Alpha channel (that is, per-pixel alpha). Note that the APIs use premultiplied alpha,
/// which means that the red, green and blue channel values in the bitmap must be premultiplied with the alpha channel value. For example, if the
/// alpha channel value is x, the red, green and blue channels must be multiplied by x and divided by 0xff prior to the call.
/// </para>
/// </summary>
public byte AlphaFormat;
/// <summary>Initializes a new instance of the <see cref="BLENDFUNCTION"/> struct and sets the alpha value.</summary>
/// <param name="alpha">The alpha.</param>
public BLENDFUNCTION(byte alpha)
{
// AC_SRC_OVER is the only possible value for BlendOp and it equals 0
BlendOp = 0;
BlendFlags = 0;
SourceConstantAlpha = alpha;
// AC_SRC_ALPHA is the only possible value for AlphaFormat and it equals 1
AlphaFormat = 1;
}
/// <summary>Gets a value indicating whether this instance is empty.</summary>
/// <value><see langword="true"/> if this instance is empty; otherwise, <see langword="false"/>.</value>
public bool IsEmpty => BlendOp == 0 && BlendFlags == 0 && AlphaFormat == 0 && SourceConstantAlpha == 0;
}
}
}