⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawtransp.cs

📁 PDA上的透明解决方法,找了很久才找到的,WINDOW MOIBLE 5.0以上才支持
💻 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 + -