最新更新 sitemap 网站制作设计本站搜索
网页设计
国外网站 韩国网站 个人主页 手提袋设计 CSS 网页特效 平面设计 网站设计 Flash CMS技巧 服装网站 php教程 photoshop 画册 服务器选用 数据库 Office
虚拟主机 域名注册 云主机 网页设计 客服QQ:8208442
当前位置:首页 > 编程开发 > asp教程

ASP扩展的ToolStripEx控件技巧

日期:10-17    来源:中国设计秀    作者:cnwebshow.com

 该控件扩展了ToolStrip的功能,增加了水印功能,增加了图标在鼠标进入时自动增亮的功能。ri2中国设计秀
ri2中国设计秀
  只要实现思想:ri2中国设计秀
ri2中国设计秀
  扩展了ToolStripPRofessionalRenderer渲染器,重写了OnRenderToolStripBorder、OnRenderSeparator、OnRenderItemImage、OnRenderToolStripBackground等几个方法,从而实现背景,水印的实现。 ri2中国设计秀
代码如下 ri2中国设计秀
    /// <summary>ri2中国设计秀
    /// ToolStrip 渲染器。更改背景为过度显示和鼠标进入时图片自动增亮的功能。ri2中国设计秀
    /// </summary>ri2中国设计秀
    public class JWToolStripBarRenderer : ToolStripProfessionalRendererri2中国设计秀
    {ri2中国设计秀
        //Dictionary<string, Image> dict = new Dictionary<string, Image>();ri2中国设计秀
        private Brush backgroundBrush = null;ri2中国设计秀
ri2中国设计秀
        List<EtyImageState> m_ImageList = new List<EtyImageState>();ri2中国设计秀
ri2中国设计秀
        public JWToolStripBarRenderer()ri2中国设计秀
        {ri2中国设计秀
            this.RoundedEdges = false;ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 当更换背景颜色时,执行该方法才能生效,为的是提高效率。ri2中国设计秀
        /// </summary>ri2中国设计秀
        public void ResetBackgroundBrush()ri2中国设计秀
        {ri2中国设计秀
            this.backgroundBrush = null;ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        private Color m_ToolStripGradientBegin = SystemColors.InactiveBorder;ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 获取在 ToolStrip 背景中使用的渐变的开始颜色。ri2中国设计秀
        /// </summary>ri2中国设计秀
        public Color ToolStripGradientBeginri2中国设计秀
        {ri2中国设计秀
            get { return m_ToolStripGradientBegin; }ri2中国设计秀
            set { m_ToolStripGradientBegin = value; }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        private Color m_ToolStripGradientEnd = SystemColors.ControlLightLight;ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 获取在 ToolStrip 背景中使用的渐变的结束颜色。ri2中国设计秀
        /// </summary>ri2中国设计秀
        public Color ToolStripGradientEndri2中国设计秀
        {ri2中国设计秀
            get { return m_ToolStripGradientEnd; }ri2中国设计秀
            set { m_ToolStripGradientEnd = value; }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        private BackgroundGradientStyle m_BackgroundGradientStyle = BackgroundGradientStyle.Horizontal;ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 设置背景渐变方式。ri2中国设计秀
        /// </summary>ri2中国设计秀
        public BackgroundGradientStyle BackgroundGradientStyleri2中国设计秀
        {ri2中国设计秀
            get { return m_BackgroundGradientStyle; }ri2中国设计秀
            setri2中国设计秀
            {ri2中国设计秀
                m_BackgroundGradientStyle = value;ri2中国设计秀
            }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        private DrawBorderMode m_DrawBorderMode = DrawBorderMode.TopAndBottom;ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 画ToolStrip边框的形式。ri2中国设计秀
        /// </summary>ri2中国设计秀
        public DrawBorderMode DrawBorderModeri2中国设计秀
        {ri2中国设计秀
            get { return m_DrawBorderMode; }ri2中国设计秀
            set { m_DrawBorderMode = value; }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        private Image m_WatermarkImage;ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 水印的图片。ri2中国设计秀
        /// </summary>ri2中国设计秀
        /// ri2中国设计秀
        public Image WatermarkImageri2中国设计秀
        {ri2中国设计秀
            get { return m_WatermarkImage; }ri2中国设计秀
            set { m_WatermarkImage = value; }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        private int m_brightValue = 30;ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 鼠标进入时的图片增亮值。默认为 30ri2中国设计秀
        /// </summary>ri2中国设计秀
        public int BrightValueri2中国设计秀
        {ri2中国设计秀
            get { return m_brightValue; }ri2中国设计秀
            set { m_brightValue = value; }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        //protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)ri2中国设计秀
        //{ri2中国设计秀
        //    e.ArrowColor = Color.Red;ri2中国设计秀
        //    e.Direction = ArrowDirection.Right;ri2中国设计秀
        //    base.OnRenderArrow(e);ri2中国设计秀
        //}ri2中国设计秀
ri2中国设计秀
        // This method draws a border around the GridStrip control.ri2中国设计秀
        protected override void OnRenderToolStripBorder(ri2中国设计秀
            ToolStripRenderEventArgs e)ri2中国设计秀
        {ri2中国设计秀
            base.OnRenderToolStripBorder(e);ri2中国设计秀
ri2中国设计秀
            if (e.ToolStrip is ToolStripDropDown)    //过滤,根据需要可能还有更多的过滤ri2中国设计秀
                return;ri2中国设计秀
ri2中国设计秀
            using (Pen pen = new Pen(SystemColors.ButtonShadow))ri2中国设计秀
            {ri2中国设计秀
                if (m_DrawBorderMode == DrawBorderMode.TopAndBottom || m_DrawBorderMode == DrawBorderMode.TopOnly)ri2中国设计秀
                    e.Graphics.DrawLine(pen, e.AffectedBounds.X, e.AffectedBounds.Y, e.AffectedBounds.Width, e.AffectedBounds.Y);ri2中国设计秀
                if (m_DrawBorderMode == DrawBorderMode.TopAndBottom || m_DrawBorderMode == DrawBorderMode.BottomOnly)ri2中国设计秀
                    e.Graphics.DrawLine(pen, e.AffectedBounds.X, e.AffectedBounds.Height - 1, e.AffectedBounds.Width, e.AffectedBounds.Height - 1);ri2中国设计秀
            }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e)ri2中国设计秀
        {ri2中国设计秀
            if (e.ToolStrip.LayoutStyle == ToolStripLayoutStyle.Table || e.ToolStrip.LayoutStyle == ToolStripLayoutStyle.Flow)ri2中国设计秀
            {ri2中国设计秀
                base.OnRenderSeparator(new ToolStripSeparatorRenderEventArgs(e.Graphics, e.Item as ToolStripSeparator, false));ri2中国设计秀
                //e.Graphics.FillRectangle(new SolidBrush(Color.Red), new Rectangle(0, 0, 100, 2));ri2中国设计秀
            }ri2中国设计秀
            elseri2中国设计秀
                base.OnRenderSeparator(e);ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        //修改只保留原图片。ri2中国设计秀
        protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e)ri2中国设计秀
        {ri2中国设计秀
            Bitmap img = e.Image as Bitmap;ri2中国设计秀
            if (img != null)ri2中国设计秀
            {ri2中国设计秀
                bool isEqualsInitImage = false;ri2中国设计秀
                EtyImageState ety = EtyImageState.GetEtyImageState(m_ImageList, img.GetHashCode(), out isEqualsInitImage);ri2中国设计秀
                if (ety == null)ri2中国设计秀
                {ri2中国设计秀
                    ety = new EtyImageState();ri2中国设计秀
                    ety.InitImage = img;ri2中国设计秀
                    ety.LightImage = ImageTool.Brightness(img, m_brightValue);ri2中国设计秀
                    m_ImageList.Add(ety);ri2中国设计秀
                }ri2中国设计秀
ri2中国设计秀
                if (e.Item.Selected)ri2中国设计秀
                    e.Item.Image = ety.LightImage;ri2中国设计秀
                elseri2中国设计秀
                    e.Item.Image = ety.InitImage;ri2中国设计秀
            }ri2中国设计秀
            base.OnRenderItemImage(e);ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        int borderPadding = 2;ri2中国设计秀
ri2中国设计秀
        protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e)ri2中国设计秀
        {ri2中国设计秀
            base.OnRenderToolStripBackground(e);ri2中国设计秀
ri2中国设计秀
            if (e.ToolStrip is ToolStripDropDown)    //过滤,根据需要可能还有更多的过滤ri2中国设计秀
                return;ri2中国设计秀
ri2中国设计秀
            //SystemColors.ControlLightLight,ri2中国设计秀
            //SystemColors.InactiveBorder,ri2中国设计秀
            Color gradientEnd = this.ToolStripGradientEnd;ri2中国设计秀
            float angle = 0;ri2中国设计秀
            if (m_BackgroundGradientStyle == BackgroundGradientStyle.Vertical)ri2中国设计秀
                angle = 90;ri2中国设计秀
            if (m_BackgroundGradientStyle == BackgroundGradientStyle.None)ri2中国设计秀
                gradientEnd = this.ToolStripGradientBegin;ri2中国设计秀
ri2中国设计秀
            if (this.backgroundBrush == null)ri2中国设计秀
            {ri2中国设计秀
                this.backgroundBrush = new LinearGradientBrush(ri2中国设计秀
                   e.ToolStrip.ClientRectangle,ri2中国设计秀
                   this.ToolStripGradientBegin,ri2中国设计秀
                   gradientEnd,ri2中国设计秀
                   angle,ri2中国设计秀
                   true);ri2中国设计秀
            }ri2中国设计秀
ri2中国设计秀
            // Paint the GridStrip control's background.ri2中国设计秀
            e.Graphics.FillRectangle(ri2中国设计秀
                this.backgroundBrush,ri2中国设计秀
                e.AffectedBounds);ri2中国设计秀
ri2中国设计秀
            if (e.ToolStrip.GripStyle == ToolStripGripStyle.Visible)ri2中国设计秀
            {ri2中国设计秀
                ControlPaint.DrawBorder3D(e.Graphics, new Rectangle(3, 3, 2, e.ToolStrip.Height - 6), Border3DStyle.Etched, Border3DSide.Left | Border3DSide.Right);ri2中国设计秀
                ControlPaint.DrawBorder3D(e.Graphics, new Rectangle(7, 3, 2, e.ToolStrip.Height - 6), Border3DStyle.Etched, Border3DSide.Left | Border3DSide.Right);ri2中国设计秀
            }ri2中国设计秀
ri2中国设计秀
            //显示水印。ri2中国设计秀
            if (m_WatermarkImage != null)ri2中国设计秀
            {ri2中国设计秀
                Point position = Point.Empty;ri2中国设计秀
                int top = borderPadding;ri2中国设计秀
                int left = 0;ri2中国设计秀
                int width = 0;ri2中国设计秀
                int height = 0;ri2中国设计秀
                if (m_WatermarkImage.Height > e.ToolStrip.Height - borderPadding * 2)ri2中国设计秀
                {ri2中国设计秀
                    //重新定义图片的显示宽高ri2中国设计秀
                    double rate = (double)m_WatermarkImage.Width / (double)m_WatermarkImage.Height;ri2中国设计秀
                    height = e.ToolStrip.Height - borderPadding * 2;ri2中国设计秀
                    width = Convert.ToInt32(rate * height);ri2中国设计秀
                }ri2中国设计秀
                elseri2中国设计秀
                {ri2中国设计秀
                    width = m_WatermarkImage.Width;ri2中国设计秀
                    height = m_WatermarkImage.Height;ri2中国设计秀
                    top = (e.ToolStrip.Height - height) / 2;ri2中国设计秀
ri2中国设计秀
                }ri2中国设计秀
                left = e.ToolStrip.Width - width - borderPadding * 2;ri2中国设计秀
ri2中国设计秀
                position = new Point(left, top);ri2中国设计秀
                Rectangle rect = new Rectangle(left, top, width, height);ri2中国设计秀
                e.Graphics.DrawImage(m_WatermarkImage, rect, new Rectangle(0, 0, m_WatermarkImage.Width, m_WatermarkImage.Height), GraphicsUnit.Pixel);ri2中国设计秀
            }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
ri2中国设计秀
        // This method handles the RenderGrip event.ri2中国设计秀
        protected override void OnRenderGrip(ToolStripGripRenderEventArgs e)ri2中国设计秀
        {ri2中国设计秀
            //DrawTitleBar(ri2中国设计秀
            //    e.Graphics,ri2中国设计秀
            //    new Rectangle(0, 0, e.ToolStrip.Width, e.ToolStrip.Height));ri2中国设计秀
            //ControlPaint.DrawBorder3D(e.Graphics, new Rectangle(0, 3, 2, e.ToolStrip.Height - 6), Border3DStyle.RaisedInner);ri2中国设计秀
            //ControlPaint.DrawBorder3D(e.Graphics, new Rectangle(3, 3, 2, e.ToolStrip.Height - 6), Border3DStyle.RaisedInner);ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
    }ri2中国设计秀
ri2中国设计秀
    /// <summary>ri2中国设计秀
    /// 为保存图片的状态而设ri2中国设计秀
    /// </summary>ri2中国设计秀
    internal class EtyImageStateri2中国设计秀
    {ri2中国设计秀
        public int InitImageKeyri2中国设计秀
        {ri2中国设计秀
            getri2中国设计秀
            {ri2中国设计秀
                if (m_InitImage == null)ri2中国设计秀
                    return -1;ri2中国设计秀
                elseri2中国设计秀
                    return m_InitImage.GetHashCode();ri2中国设计秀
            }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        private Image m_InitImage;ri2中国设计秀
ri2中国设计秀
        public Image InitImageri2中国设计秀
        {ri2中国设计秀
            get { return m_InitImage; }ri2中国设计秀
            set { m_InitImage = value; }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        public int LightImageKeyri2中国设计秀
        {ri2中国设计秀
            getri2中国设计秀
            {ri2中国设计秀
                if (m_LightImage == null)ri2中国设计秀
                    return -1;ri2中国设计秀
                elseri2中国设计秀
                    return m_LightImage.GetHashCode();ri2中国设计秀
            }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        private Image m_LightImage;ri2中国设计秀
ri2中国设计秀
        public Image LightImageri2中国设计秀
        {ri2中国设计秀
            get { return m_LightImage; }ri2中国设计秀
            set { m_LightImage = value; }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 从集合ri2中国设计秀
        /// </summary>ri2中国设计秀
        /// <param name="list"></param>ri2中国设计秀
        /// <param name="key"></param>ri2中国设计秀
        /// <returns></returns>ri2中国设计秀
        public static EtyImageState GetEtyImageState(List<EtyImageState> list, int key, out bool isEqualsInitImage)ri2中国设计秀
        {ri2中国设计秀
            isEqualsInitImage = false;ri2中国设计秀
            EtyImageState retEty = null;ri2中国设计秀
            foreach (EtyImageState ety in list)ri2中国设计秀
            {ri2中国设计秀
                if (ety.InitImageKey == key)ri2中国设计秀
                {ri2中国设计秀
                    isEqualsInitImage = true;ri2中国设计秀
                    retEty = ety;ri2中国设计秀
                    break;ri2中国设计秀
                }ri2中国设计秀
                else if (ety.LightImageKey == key)ri2中国设计秀
                {ri2中国设计秀
                    retEty = ety;ri2中国设计秀
                    break;ri2中国设计秀
                }ri2中国设计秀
            }ri2中国设计秀
            return retEty;ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
    }ri2中国设计秀
ri2中国设计秀
水印的处理(数字图片处理)ri2中国设计秀
ri2中国设计秀
    public static class ImageToolri2中国设计秀
    {ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 根据字符串生成图片。ri2中国设计秀
        /// </summary>ri2中国设计秀
        /// <param name="data"></param>ri2中国设计秀
        /// <returns></returns>ri2中国设计秀
        public static Bitmap DeserializeFromBase64(string data)ri2中国设计秀
        {ri2中国设计秀
            // Decode the string and create a memory stream ri2中国设计秀
            // on the decoded string data.ri2中国设计秀
            MemoryStream stream =ri2中国设计秀
                new MemoryStream(Convert.FromBase64String(data));ri2中国设计秀
ri2中国设计秀
            // Create a new bitmap from the stream.ri2中国设计秀
            Bitmap b = new Bitmap(stream);ri2中国设计秀
ri2中国设计秀
            return b;ri2中国设计秀
        }ri2中国设计秀
        //图片 转为    base64编码的文本ri2中国设计秀
        public static string ImgToBase64String(Image bmp)ri2中国设计秀
        {ri2中国设计秀
            MemoryStream ms = new MemoryStream();ri2中国设计秀
            bmp.Save(ms, bmp.RawFormat);ri2中国设计秀
            byte[] arr = new byte[ms.Length];ri2中国设计秀
            ms.Position = 0;ri2中国设计秀
            ms.Read(arr, 0, (int)ms.Length);ri2中国设计秀
            ms.Close();ri2中国设计秀
            String strbase64 = Convert.ToBase64String(arr);ri2中国设计秀
            return strbase64;ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 图片增亮。ri2中国设计秀
        /// </summary>ri2中国设计秀
        /// <param name="img"></param>ri2中国设计秀
        /// <returns></returns>ri2中国设计秀
        public static Image Brightness(Image img, int brightValue)ri2中国设计秀
        {ri2中国设计秀
            int percent = brightValue;ri2中国设计秀
            Single v = 0.006F * percent;ri2中国设计秀
            Single[][] matrix = { ri2中国设计秀
                new Single[] { 1, 0, 0, 0, 0 }, ri2中国设计秀
                new Single[] { 0, 1, 0, 0, 0 }, ri2中国设计秀
                new Single[] { 0, 0, 1, 0, 0 }, ri2中国设计秀
                new Single[] { 0, 0, 0, 1, 0 }, ri2中国设计秀
                new Single[] { v, v, v, 0, 1 } ri2中国设计秀
            };ri2中国设计秀
            System.Drawing.Imaging.ColorMatrix cm = new System.Drawing.Imaging.ColorMatrix(matrix);ri2中国设计秀
            System.Drawing.Imaging.ImageAttributes attr = new System.Drawing.Imaging.ImageAttributes();ri2中国设计秀
            attr.SetColorMatrix(cm);ri2中国设计秀
            //Image tmpri2中国设计秀
            //Image tmp = (Image)img.Clone();ri2中国设计秀
            Bitmap tmp = new Bitmap(img);ri2中国设计秀
            Graphics g = Graphics.FromImage(tmp);ri2中国设计秀
            tryri2中国设计秀
            {ri2中国设计秀
                Rectangle destRect = new Rectangle(0, 0, img.Width, img.Height);ri2中国设计秀
                g.DrawImage(tmp, destRect, 0, 0, tmp.Width, tmp.Height, GraphicsUnit.Pixel, attr);ri2中国设计秀
            }ri2中国设计秀
            finallyri2中国设计秀
            {ri2中国设计秀
                g.Dispose();ri2中国设计秀
            }ri2中国设计秀
ri2中国设计秀
            return tmp;ri2中国设计秀
ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        //处理不了透明的背景ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 制作水印图片ri2中国设计秀
        /// </summary>ri2中国设计秀
        /// <param name="iTheImage">要制作水印的图片</param>ri2中国设计秀
        /// <param name="width">制作水印的宽</param>ri2中国设计秀
        /// <param name="height">制作水印的高</param>ri2中国设计秀
        /// <returns></returns>ri2中国设计秀
        public static Bitmap WatermarkImage(Bitmap iTheImage, int width, int height)ri2中国设计秀
        {ri2中国设计秀
            //Bitmap watermark = new Bitmap(width, height,ri2中国设计秀
            //        PixelFormat.Format24bppRgb);ri2中国设计秀
            Bitmap watermark = new Bitmap(iTheImage);ri2中国设计秀
ri2中国设计秀
            Graphics g = Graphics.FromImage(watermark);ri2中国设计秀
            g.Clear(Color.White);ri2中国设计秀
            //g.Clear(iTheImage.GetPixel(0,0));ri2中国设计秀
            g.SmoothingMode = SmoothingMode.HighQuality;ri2中国设计秀
            g.InterpolationMode = InterpolationMode.High;ri2中国设计秀
ri2中国设计秀
            ImageAttributes imageAttributes = new ImageAttributes(); ri2中国设计秀
            ColorMap colorMap = new ColorMap();ri2中国设计秀
ri2中国设计秀
            colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);ri2中国设计秀
            colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);ri2中国设计秀
            ColorMap[] remapTable = { colorMap };ri2中国设计秀
ri2中国设计秀
            imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);ri2中国设计秀
ri2中国设计秀
            float[][] colorMatrixElements = {ri2中国设计秀
                                                new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f},ri2中国设计秀
                                                new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},ri2中国设计秀
                                                new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},ri2中国设计秀
                                                new float[] {0.0f, 0.0f, 0.0f, 0.3f, 0.0f},ri2中国设计秀
                                                new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}ri2中国设计秀
                                            };ri2中国设计秀
ri2中国设计秀
            ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);ri2中国设计秀
ri2中国设计秀
            imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);ri2中国设计秀
ri2中国设计秀
            #region 保留学习ri2中国设计秀
ri2中国设计秀
            ////int WatermarkWidth = 0;ri2中国设计秀
            ////int WatermarkHeight = 0;ri2中国设计秀
            ////double bl = 1d;ri2中国设计秀
ri2中国设计秀
            //////计算水印图片的比率ri2中国设计秀
            //////取背景的1/4宽度来比较ri2中国设计秀
            ////if ((width > watermark.Width * 4) && (height > watermark.Height * 4))ri2中国设计秀
            ////{ri2中国设计秀
            ////    bl = 1;ri2中国设计秀
            ////}ri2中国设计秀
            ////else if ((width > watermark.Width * 4) && (height < watermark.Height * 4))ri2中国设计秀
            ////{ri2中国设计秀
            ////    bl = Convert.ToDouble(height / 4) / Convert.ToDouble(watermark.Height);ri2中国设计秀
ri2中国设计秀
            ////}ri2中国设计秀
            ////else if ((width < watermark.Width * 4) && (height > watermark.Height * 4))ri2中国设计秀
            ////{ri2中国设计秀
            ////    bl = Convert.ToDouble(width / 4) / Convert.ToDouble(watermark.Width);ri2中国设计秀
            ////}ri2中国设计秀
            ////elseri2中国设计秀
            ////{ri2中国设计秀
            ////    if ((width * watermark.Height) > (height * watermark.Width))ri2中国设计秀
            ////    {ri2中国设计秀
            ////        bl = Convert.ToDouble(height / 4) / Convert.ToDouble(watermark.Height);ri2中国设计秀
ri2中国设计秀
            ////    }ri2中国设计秀
            ////    elseri2中国设计秀
            ////    {ri2中国设计秀
            ////        bl = Convert.ToDouble(width / 4) / Convert.ToDouble(watermark.Width);ri2中国设计秀
ri2中国设计秀
            ////    }ri2中国设计秀
ri2中国设计秀
            ////}ri2中国设计秀
ri2中国设计秀
            ////WatermarkWidth = Convert.ToInt32(watermark.Width * bl);ri2中国设计秀
            ////WatermarkHeight = Convert.ToInt32(watermark.Height * bl);ri2中国设计秀
ri2中国设计秀
ri2中国设计秀
            ////switch (_watermarkPosition)ri2中国设计秀
            ////{ri2中国设计秀
            ////    case "WM_TOP_LEFT":ri2中国设计秀
            ////        xpos = 10;ri2中国设计秀
            ////        ypos = 10;ri2中国设计秀
            ////        break;ri2中国设计秀
            ////    case "WM_TOP_RIGHT":ri2中国设计秀
            ////        xpos = _width - WatermarkWidth - 10;ri2中国设计秀
            ////        ypos = 10;ri2中国设计秀
            ////        break;ri2中国设计秀
            ////    case "WM_BOTTOM_RIGHT":ri2中国设计秀
            ////        xpos = _width - WatermarkWidth - 10;ri2中国设计秀
            ////        ypos = _height - WatermarkHeight - 10;ri2中国设计秀
            ////        break;ri2中国设计秀
            ////    case "WM_BOTTOM_LEFT":ri2中国设计秀
            ////        xpos = 10;ri2中国设计秀
            ////        ypos = _height - WatermarkHeight - 10;ri2中国设计秀
            ////        break;ri2中国设计秀
            ////}ri2中国设计秀
ri2中国设计秀
            #endregionri2中国设计秀
ri2中国设计秀
            tryri2中国设计秀
            {ri2中国设计秀
                Rectangle destRect = new Rectangle(0, 0, watermark.Width, watermark.Height);ri2中国设计秀
ri2中国设计秀
                g.DrawImage(iTheImage, destRect, 0, 0, watermark.Width, watermark.Height,ri2中国设计秀
                    GraphicsUnit.Pixel,ri2中国设计秀
                    imageAttributes);ri2中国设计秀
            }ri2中国设计秀
            finallyri2中国设计秀
            {ri2中国设计秀
                imageAttributes.Dispose();ri2中国设计秀
                g.Dispose();ri2中国设计秀
            }ri2中国设计秀
ri2中国设计秀
            return watermark;ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 制作透明的图片。对透明背景保留原来的样子。ri2中国设计秀
        /// </summary>ri2中国设计秀
        /// <param name="bmpobj"></param>ri2中国设计秀
        /// <param name="transValue">透明度 (0 - 255)</param>ri2中国设计秀
        public static void WatermarkImage(Bitmap bmpobj, int transValue)ri2中国设计秀
        {ri2中国设计秀
            for (int i = 0; i < bmpobj.Height; i++)ri2中国设计秀
            {ri2中国设计秀
                for (int j = 0; j < bmpobj.Width; j++)ri2中国设计秀
                {ri2中国设计秀
                    Color dot = bmpobj.GetPixel(j, i);ri2中国设计秀
                    if (dot.A > 0)ri2中国设计秀
                    {ri2中国设计秀
                        bmpobj.SetPixel(j, i, Color.White);ri2中国设计秀
                        bmpobj.SetPixel(j,i,Color.FromArgb(transValue,dot.R,dot.G,dot.B));ri2中国设计秀
                    }ri2中国设计秀
                }ri2中国设计秀
            }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 灰度转换,逐点方式ri2中国设计秀
        /// </summary>ri2中国设计秀
        public static void GrayByPixels(Bitmap bmpobj)ri2中国设计秀
        {ri2中国设计秀
            for (int i = 0; i < bmpobj.Height; i++)ri2中国设计秀
            {ri2中国设计秀
                for (int j = 0; j < bmpobj.Width; j++)ri2中国设计秀
                {ri2中国设计秀
                    Color dot = bmpobj.GetPixel(j, i);ri2中国设计秀
                    if (dot.A > 0)ri2中国设计秀
                    {ri2中国设计秀
                        int tmpValue = GetGrayNumColor(dot);ri2中国设计秀
                        bmpobj.SetPixel(j, i, Color.FromArgb(tmpValue, tmpValue, tmpValue));ri2中国设计秀
                    }ri2中国设计秀
                }ri2中国设计秀
            }ri2中国设计秀
        }ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 根据RGB,计算灰度值ri2中国设计秀
        /// </summary>ri2中国设计秀
        /// <param name="posClr">Color值</param>ri2中国设计秀
        /// <returns>灰度值,整型</returns>ri2中国设计秀
        private static int GetGrayNumColor(System.Drawing.Color posClr)ri2中国设计秀
        {ri2中国设计秀
            return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472) >> 16;ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
ri2中国设计秀
        ////public static bool Invert(Bitmap b)ri2中国设计秀
        ////{ri2中国设计秀
        ////    BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),ri2中国设计秀
        ////       ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);ri2中国设计秀
        ////    int stride = bmData.Stride;ri2中国设计秀
        ////    System.IntPtr Scan0 = bmData.Scan0;ri2中国设计秀
        ////    unsaferi2中国设计秀
        ////    {ri2中国设计秀
        ////        byte* p = (byte*)(void*)Scan0;ri2中国设计秀
        ////        int nOffset = stride - b.Width * 3;ri2中国设计秀
        ////        int nWidth = b.Width * 3;ri2中国设计秀
        ////        for (int y = 0; y < b.Height; ++y)ri2中国设计秀
        ////        {ri2中国设计秀
        ////            for (int x = 0; x < nWidth; ++x)ri2中国设计秀
        ////            {ri2中国设计秀
        ////                p[0] = (byte)(255 - p[0]);ri2中国设计秀
        ////                ++p;ri2中国设计秀
        ////            }ri2中国设计秀
        ////            p += nOffset;ri2中国设计秀
        ////        }ri2中国设计秀
        ////    }ri2中国设计秀
        ////    b.UnlockBits(bmData);ri2中国设计秀
        ////    return true;ri2中国设计秀
        ////}ri2中国设计秀
ri2中国设计秀
        ////public static bool Gray(Bitmap b)ri2中国设计秀
        ////{ri2中国设计秀
        ////    BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height),ri2中国设计秀
        ////              ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);ri2中国设计秀
        ////    int stride = bmData.Stride;ri2中国设计秀
        ////    System.IntPtr Scan0 = bmData.Scan0;ri2中国设计秀
        ////    unsaferi2中国设计秀
        ////    {ri2中国设计秀
        ////        byte* p = (byte*)(void*)Scan0;ri2中国设计秀
        ////        int nOffset = stride - b.Width * 3;ri2中国设计秀
        ////        byte red, green, blue;ri2中国设计秀
        ////        for (int y = 0; y < b.Height; ++y)ri2中国设计秀
        ////        {ri2中国设计秀
        ////            for (int x = 0; x < b.Width; ++x)ri2中国设计秀
        ////            {ri2中国设计秀
        ////                blue = p[0];ri2中国设计秀
        ////                green = p[1];ri2中国设计秀
        ////                red = p[2];ri2中国设计秀
        ////                p[0] = p[1] = p[2] = (byte)(.299 * red + .587 * green + .114 * blue);ri2中国设计秀
        ////                p += 3;ri2中国设计秀
        ////            }ri2中国设计秀
        ////            p += nOffset;ri2中国设计秀
        ////        }ri2中国设计秀
        ////    }ri2中国设计秀
        ////    b.UnlockBits(bmData);ri2中国设计秀
        ////    return true;ri2中国设计秀
        ////}ri2中国设计秀
ri2中国设计秀
        ////public static bool Brightness(Bitmap b, int nBrightness)ri2中国设计秀
        ////{ri2中国设计秀
        ////    if (nBrightness < -255 || nBrightness > 255)ri2中国设计秀
        ////        return false;ri2中国设计秀
        ////    BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width,ri2中国设计秀
        ////                                b.Height), ImageLockMode.ReadWrite,ri2中国设计秀
        ////                                PixelFormat.Format24bppRgb);ri2中国设计秀
        ////    int stride = bmData.Stride;ri2中国设计秀
        ////    System.IntPtr Scan0 = bmData.Scan0;ri2中国设计秀
        ////    int nVal = 0;ri2中国设计秀
        ////    unsaferi2中国设计秀
        ////    {ri2中国设计秀
        ////        byte* p = (byte*)(void*)Scan0;ri2中国设计秀
        ////        int nOffset = stride - b.Width * 3;ri2中国设计秀
        ////        int nWidth = b.Width * 3;ri2中国设计秀
        ////        for (int y = 0; y < b.Height; ++y)ri2中国设计秀
        ////        {ri2中国设计秀
        ////            for (int x = 0; x < nWidth; ++x)ri2中国设计秀
        ////            {ri2中国设计秀
        ////                nVal = (int)(p[0] + nBrightness);ri2中国设计秀
        ////                if (nVal < 0) nVal = 0;ri2中国设计秀
        ////                if (nVal > 255) nVal = 255;ri2中国设计秀
        ////                p[0] = (byte)nVal;ri2中国设计秀
        ////                ++p;ri2中国设计秀
        ////            }ri2中国设计秀
        ////            p += nOffset;ri2中国设计秀
        ////        }ri2中国设计秀
        ////    }ri2中国设计秀
        ////    b.UnlockBits(bmData);ri2中国设计秀
        ////    return true;ri2中国设计秀
        ////}ri2中国设计秀
    }ri2中国设计秀
ri2中国设计秀
    /// <summary>ri2中国设计秀
    /// 扩展的ToolStrip,更改背景为过度显示和鼠标进入时图片自动增亮的功能。ri2中国设计秀
    /// </summary>ri2中国设计秀
    public partial class ToolStripEx : ToolStripri2中国设计秀
    {ri2中国设计秀
        private JWToolStripBarRenderer render = new JWToolStripBarRenderer();ri2中国设计秀
        public ToolStripEx()ri2中国设计秀
        {ri2中国设计秀
            this.Renderer = render;ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 获取在 ToolStrip 背景中使用的渐变的开始颜色。ri2中国设计秀
        /// </summary>ri2中国设计秀
        [Description("获取在 ToolStrip 背景中使用的渐变的开始颜色。"), DefaultValue(typeof(Color), "InactiveBorder"), Category("特效设置")]ri2中国设计秀
        public Color ToolStripGradientBeginri2中国设计秀
        {ri2中国设计秀
            get { return render.ToolStripGradientBegin; }ri2中国设计秀
            setri2中国设计秀
            {ri2中国设计秀
                render.ToolStripGradientBegin = value;ri2中国设计秀
                render.ResetBackgroundBrush();ri2中国设计秀
                this.Invalidate();ri2中国设计秀
            }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 获取在 ToolStrip 背景中使用的渐变的结束颜色。ri2中国设计秀
        /// </summary>ri2中国设计秀
        [Description("获取在 ToolStrip 背景中使用的渐变的结束颜色。"), DefaultValue(typeof(Color), "ControlLightLight"), Category("特效设置")]ri2中国设计秀
        public Color ToolStripGradientEndri2中国设计秀
        {ri2中国设计秀
            get { return render.ToolStripGradientEnd; }ri2中国设计秀
            setri2中国设计秀
            {ri2中国设计秀
                render.ToolStripGradientEnd = value;ri2中国设计秀
                render.ResetBackgroundBrush();ri2中国设计秀
                this.Invalidate();ri2中国设计秀
            }ri2中国设计秀
ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 设置背景渐变方式。ri2中国设计秀
        /// </summary>ri2中国设计秀
        [Description("设置背景渐变方式。"), DefaultValue(typeof(BackgroundGradientStyle), "Horizontal"), Category("特效设置")]ri2中国设计秀
        public BackgroundGradientStyle BackgroundGradientStyleri2中国设计秀
        {ri2中国设计秀
            get { return render.BackgroundGradientStyle; }ri2中国设计秀
            setri2中国设计秀
            {ri2中国设计秀
                render.BackgroundGradientStyle = value;ri2中国设计秀
                render.ResetBackgroundBrush();ri2中国设计秀
                this.Invalidate();ri2中国设计秀
            }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
         private Bitmap m_WatermarkImage;ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 水印的图片。ri2中国设计秀
        /// </summary>ri2中国设计秀
        /// ri2中国设计秀
        [Description("水印的图片。"), DefaultValue(null), Category("特效设置")]ri2中国设计秀
        public Bitmap WatermarkImageri2中国设计秀
        {ri2中国设计秀
            get { return m_WatermarkImage; }ri2中国设计秀
            setri2中国设计秀
            {ri2中国设计秀
                m_WatermarkImage = value;ri2中国设计秀
                //制作水印ri2中国设计秀
                if (value != null)ri2中国设计秀
                {ri2中国设计秀
                    Bitmap img = new Bitmap(value);ri2中国设计秀
ri2中国设计秀
                    if (m_watermarkGrayEffect)ri2中国设计秀
                        ImageTool.GrayByPixels(img);ri2中国设计秀
                    if (m_WatermarkTransparency != 255)ri2中国设计秀
                        ImageTool.WatermarkImage(img, m_WatermarkTransparency);ri2中国设计秀
ri2中国设计秀
                    render.WatermarkImage = img;ri2中国设计秀
                }ri2中国设计秀
                elseri2中国设计秀
                    render.WatermarkImage = null;ri2中国设计秀
ri2中国设计秀
                this.Invalidate();ri2中国设计秀
            }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 画ToolStrip边框的形式。ri2中国设计秀
        /// </summary>ri2中国设计秀
        [Description("画ToolStrip边框的形式。"), DefaultValue(typeof(DrawBorderMode), "TopAndBottom"), Category("特效设置")]ri2中国设计秀
        public DrawBorderMode DrawBorderModeri2中国设计秀
        {ri2中国设计秀
            get { return render.DrawBorderMode; }ri2中国设计秀
            setri2中国设计秀
            {ri2中国设计秀
                render.DrawBorderMode = value;ri2中国设计秀
                this.Invalidate();ri2中国设计秀
            }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        private bool m_watermarkGrayEffect = false;ri2中国设计秀
ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 水印的灰度效果,默认为 false;ri2中国设计秀
        /// </summary>ri2中国设计秀
        ///         ri2中国设计秀
        [Description("水印的灰度效果,默认为 false;"), DefaultValue(false), Category("特效设置")]ri2中国设计秀
        public bool WatermarkGrayEffectri2中国设计秀
        {ri2中国设计秀
            get { return m_watermarkGrayEffect; }ri2中国设计秀
            setri2中国设计秀
            {ri2中国设计秀
                m_watermarkGrayEffect = value;ri2中国设计秀
                WatermarkImage = m_WatermarkImage;ri2中国设计秀
            }ri2中国设计秀
        }ri2中国设计秀
ri2中国设计秀
        private int m_WatermarkTransparency = 255;ri2中国设计秀
        /// <summary>ri2中国设计秀
        /// 水印显示的透明度。ri2中国设计秀
        /// </summary>ri2中国设计秀
        /// ri2中国设计秀
        [Description("水印显示的透明度。默认为 255;"), DefaultValue(255), Category("特效设置")]ri2中国设计秀
        public int WatermarkTransparencyri2中国设计秀
        {ri2中国设计秀
            get { return m_WatermarkTransparency; }ri2中国设计秀
            setri2中国设计秀
            {ri2中国设计秀
                if (value > 255 || value < 0)ri2中国设计秀
                    throw new Exception("请输入 0 - 255 之间的一个数值。");ri2中国设计秀
ri2中国设计秀
                m_WatermarkTransparency = value;ri2中国设计秀
                WatermarkImage = m_WatermarkImage;ri2中国设计秀
            }ri2中国设计秀
        }ri2中国设计秀
    }ri2中国设计秀

本文引用地址:/bc/article_46195.html
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明