BLENDFUNCTION.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System.Runtime.InteropServices;
  2. namespace Microsoft.Win32
  3. {
  4. /// <summary>
  5. /// BLENDFUNCTION定义
  6. /// </summary>
  7. public static partial class NativeMethods
  8. {
  9. /// <summary>
  10. /// <para>实现功能:The BLENDFUNCTION structure controls blending by specifying the blending functions for source and destination bitmaps.</para>
  11. /// <para>调用方法:Win32结构体</para>
  12. /// <para>.</para>
  13. /// <para>创建人员:许崇雷</para>
  14. /// <para>创建日期:2011-12-23</para>
  15. /// <para>创建备注:</para>
  16. /// <para>.</para>
  17. /// <para>修改人员:</para>
  18. /// <para>修改日期:</para>
  19. /// <para>修改备注:</para>
  20. /// </summary>
  21. [StructLayout(LayoutKind.Sequential)]
  22. public struct BLENDFUNCTION
  23. {
  24. /// <summary>
  25. /// 无效的,空结构所有字段为默认值
  26. /// </summary>
  27. public static readonly BLENDFUNCTION Empty;
  28. /// <summary>
  29. /// 一般情况下使用该值
  30. /// </summary>
  31. public static readonly BLENDFUNCTION Default;
  32. /// <summary>
  33. /// 静态构造
  34. /// </summary>
  35. static BLENDFUNCTION()
  36. {
  37. Empty = new BLENDFUNCTION();
  38. Default = new BLENDFUNCTION(NativeMethods.AC_SRC_OVER, 0, 255, NativeMethods.AC_SRC_ALPHA);
  39. }
  40. /// <summary>
  41. /// 指定源混合操作。目前,唯一的源和目标的混合方式已定义为AC_SRC_OVER。
  42. /// </summary>
  43. public byte BlendOp;
  44. /// <summary>
  45. /// 必须是0。
  46. /// </summary>
  47. public byte BlendFlags;
  48. /// <summary>
  49. /// 指定一个alpha透明度值,这个值将用于整个源位图;该SourceConstantAlpha值与源位图的每个像素的alpha值组合;如果设置为0,就会假定你的图片是透明的;如果需要使用每像素本身的alpha值,设置SourceConstantAlpha值255(不透明)。
  50. /// </summary>
  51. public byte SourceConstantAlpha;
  52. /// <summary>
  53. /// 这个参数控制源和目标的解析方式,AlphaFormat参数有以下值:AC_SRC_ALPHA: 这个值在源或者目标本身有Alpha通道时(也就是操作的图本身带有透明通道信息时),提醒系统API调用函数前必须预先乘以alpha值,也就是说位图上某个像素位置的red、green、blue通道值必须先与alpha相乘。例如,如果alpha透明值是x,那么red、green、blue三个通道的值必须乘以x并且再除以255(因为alpha的值的范围是0~255),之后才能被调用。
  54. /// </summary>
  55. public byte AlphaFormat;
  56. /// <summary>
  57. /// 构造函数
  58. /// </summary>
  59. /// <param name="op">BlendOp</param>
  60. /// <param name="flags">BlendFlags</param>
  61. /// <param name="alpha">SourceConstantAlpha</param>
  62. /// <param name="format">AlphaFormat</param>
  63. public BLENDFUNCTION(byte op, byte flags, byte alpha, byte format)
  64. {
  65. this.BlendOp = op;
  66. this.BlendFlags = flags;
  67. this.SourceConstantAlpha = alpha;
  68. this.AlphaFormat = format;
  69. }
  70. }
  71. }
  72. }