📄 drawtransp.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Reflection;
namespace AlphaBlendTest
{
public class DrawTransp
{
private struct BlendFunction
{
public byte BlendOp;//源混合操作
public byte BlendFlags;//必须是0
public byte SourceConstantAlpha;//0到255间的值,这里0表示完全透明,255表示完全不透明。
public byte AlphaFormat;//有两个值 0表示常量alpha值,AC_SRC_ALPHA表示每个像素有各自的alpha通道
}
private enum BlendOperation : byte
{
AC_SRC_OVER = 0x00//表示根据源alpha值把源图像叠加到目标图像上
}
private enum BlendFlags : byte
{
Zero = 0x00
}
private enum SourceConstantAlpha : byte
{
Transparent = 0x00,
Opaque = 0xFF
}
private enum AlphaFormat : byte
{
AC_SRC_ALPHA = 0x01
}
private class PlatformAPIs
{
/// <summary>
/// 用于绘制透明或半透明的位图,WinCE5.0+的版本支持,
/// </summary>
/// <param name="hdcDest">目标设备图面的句柄</param>
/// <param name="xDest">绘制目标图面的x轴坐标</param>
/// <param name="yDest">绘制目标图面的y轴坐标</param>
/// <param name="cxDest">目标矩形的宽</param>
/// <param name="cyDest">目标矩形的高</param>
/// <param name="hdcSrc">源设备图面的句柄</param>
/// <param name="xSrc">源x坐标</param>
/// <param name="ySrc">源y坐标</param>
/// <param name="cxSrc">源图宽</param>
/// <param name="cySrc">源图高</param>
/// <param name="blendFunction">BLENDFUNCTION结构,控制源和目标位图的混合方式</param>
/// <returns></returns>
[DllImport("coredll.dll")]
extern public static Int32 AlphaBlend(IntPtr hdcDest, Int32 xDest, Int32 yDest, Int32 cxDest, Int32 cyDest, IntPtr hdcSrc, Int32 xSrc, Int32 ySrc, Int32 cxSrc, Int32 cySrc, BlendFunction blendFunction);
}
public DrawTransp()
{
}
public static void DrawTime(string time, Graphics gx,int x, int y)
{
Font timeFont = new Font("Tahoma", 32, FontStyle.Regular);
SizeF size = gx.MeasureString(time, timeFont);
//int x = this.Width / 2 - (int)size.Width / 2;
gx.DrawString(time, timeFont, new SolidBrush(Color.WhiteSmoke), x, y);
}
/// <summary>
/// 绘制透明图像
/// </summary>
/// <param name="gx">绘图图面</param>
/// <param name="image">需要绘制的位图</param>
/// <param name="transp">透明度trasp/250</param>
/// <param name="x">绘图起点的横坐标</param>
/// <param name="y">绘图起点的纵坐标</param>
public static void DrawAlpha(Graphics gx, Bitmap image, byte transp, int x, int y)
{
using (Graphics gxSrc = Graphics.FromImage(image))
{
IntPtr hdcDst = gx.GetHdc();
IntPtr hdcSrc = gxSrc.GetHdc();
BlendFunction blendFunction = new BlendFunction();
blendFunction.BlendOp = (byte)BlendOperation.AC_SRC_OVER;
blendFunction.BlendFlags = (byte)BlendFlags.Zero;
blendFunction.SourceConstantAlpha = transp;
blendFunction.AlphaFormat = (byte)0;
PlatformAPIs.AlphaBlend(hdcDst, x, y, image.Width, image.Height, hdcSrc, 0, 0, image.Width, image.Height, blendFunction);
gx.ReleaseHdc(hdcDst);
gxSrc.ReleaseHdc(hdcSrc);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -