永发信息网

该vb代码是api函数,应该怎么分析清楚?字数要多。

答案:2  悬赏:0  手机版
解决时间 2021-05-08 20:59
  • 提问者网友:我是我
  • 2021-05-08 03:29

Public Declare Function AlphaBlend Lib "msimg32" (ByVal hDestDC As Long, _

ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _

ByVal nHeight As Long, ByVal hSrcDC As Long, _

ByVal xSrc As Long, ByVal ySrc As Long, ByVal widthSrc As Long, _

ByVal heightSrc As Long, ByVal blendFunct As Long) As Boolean

最佳答案
  • 五星知识达人网友:封刀令
  • 2021-05-08 04:33
函数功能:该函数用来显示具有指定透明度的图像。

  函数原型:AlphaBlend(HDC hdcDest,int nXOriginDest,int nYOriginDest,int nWidthDest,int hHeightDest,HDC hdcSrc,int nXOriginSrc,int nYOriginSrc,int nWidthSrc,int nHeightSrc,BLENDFUNCTION blendFunction);

  参数:

  hdcDest:指向目标设备环境的句柄。

  nXoriginDest:指定目标矩形区域左上角的X轴坐标,按逻辑单位。

  nYOriginDest:指定目标矩形区域左上角的Y轴坐标,按逻辑单位。

  nWidthDest:指定目标矩形区域的宽度,按逻辑单位。

  hHeghtdest:指向目标矩形区域高度的句柄,按逻辑单位。

  hdcSrc:指向源设备环境的句柄。

  nXOriginSrc:指定源矩形区域左上角的X轴坐标,按逻辑单位。

  nYOriginSrc:指定源矩形区域左上角的Y轴坐标,按逻辑单位。

  nWidthSrc:指定源矩形区域的宽度,按逻辑单位。

  nHeightSrc:指定源矩形区域的高度,按逻辑单位。

  blendFunction:指定用于源位图和目标位图使用的alpha混合功能,用于整个源位图的全局alpha值和格式信息。源和目标混合功能当前只限为AC_SRC_OVER。

  最后一个参数blendFunction是一个BLENDFUNCTION结构。BLENDFUNCTION结构控制源和目标位图的混合方式,它的BlendOp字段指明了源混合操作,但只支持AC_SRC_OVER,即根据源alpha值把源图像叠加到目标图像上。OpenGL的alpha混合还支持其他的方式,如常量颜色源。下一个字段BlendFalgs必须是0,也是为以后的应用保留的。最后一个字段AlphaFormat有两个选择:0表示常量alpha值,AC_SRC_ALPHA表示每个像素有各自的alpha通道。

  如果AlphaFormat字段为0,源位图中的所有像素使用同样的常量alpha值,即SourceConstantAlpha字段中的值,该值实际上是0和255,而不是0和1。这里0表示完全透明,255表示完全不透明。目标像素以255-SourceConstantAlpha值作为alpha值。

  如果AlphaFormat字段的值是AC_SRC_ALPHA,源设备表面的每个像素必须有各自的alpha通道。即,必须是32-bpp的物理设备上下文,或是选中了32-bpp DDB和DIB段的内存设备上下文。这些情况下,每个源像素有4个8位通道:红、绿、蓝和alpha。每个像素的alpha通道和SourceConstantAlpha字段一起用于把源和目标混合起来。实际用于计算的运算式如下:

  Tmp.Red = Src.Red * SourceConstantAlpha / 255;

  Tmp.Green = Src.Green * SourceConstantAlpha / 255;

  Tmp.Blue = Src.Blue * SourceConstantAlpha / 255;

  Tmp.Alpha = Src.Alpha * SourceConstantAlpha / 255;

  Beta = 255 – Tmp.alpha;

  Dst.Red = Tmp.Red + Round((Beta * Dst.Red )/255);

  Dst.Green = Tmp.Green + Round((Beta * Dst.Green)/255);

  Dst.Blue = Tmp.Blue + Round((Beta * Dst.Blue )/255);

  Dst.Alpha = Tmp.Alpha + Round((Beta * Dst.Alpha)/255);

  返回值:如果函数执行成功,那么返回值为TRUE;如果函数执行失败,那么返回值为FALSE。

  Windows NT:若想获取更多错误信息,请调用GetLastError函数。

  备注:如果源矩形区域与目标矩形区域大小不一样,那么将缩放源位图与目标矩形区域匹配。如果使用SetStretchBltMode函数,那么iStretchMode的值是BLACKONWHITE和WHITEONBLACK,在本函数中,iStretchMode的值自动转换成COLORONCOLOR。目标坐标使用为目标设备环境当前指定的转换方式进行转换。源坐标则使用为源设备环境指定的当前转换方式进行转换。如果源设备环境标识为增强型图元文件设备环境,那么会出错(并且该函数返回FALSE)。如果目标和源位图的色彩格式不同,那么AlphaBlend将源位图转换以匹配目标位图。

  AlphaBlend不支持镜像。如果源或目标区域的宽度或高度为负数,那么调用将失败。
全部回答
  • 1楼网友:人间朝暮
  • 2021-05-08 06:09

这个API名叫AlphaBlend,是透明贴图用的

Public Declare Function AlphaBlend Lib "msimg32" (ByVal hDestDC As Long, _ '这里表示这个函数所在的DLL是msimg32,要传入要贴图的DC句柄

ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, _ 'X,Y坐标,宽度

ByVal nHeight As Long, ByVal hSrcDC As Long, _ ' 高度,源图DC句柄

ByVal xSrc As Long, ByVal ySrc As Long, ByVal widthSrc As Long, _ '源中的X,Y坐标,宽度

ByVal heightSrc As Long, ByVal blendFunct As Long) As Boolean '源中的高度,透明方式

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯