?? 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 + -