用C#仿旺旺皮肤实现--[下]

距离上一次发表到现在已经有很长是时间了,趁着国庆放假前的空余时间将下半部分完成。客户的实现相比服务端稍难一点,我们需要对图像进行截取。我在实现过程中出现了一些问题,先列举出来,第一程序比较吃内存、第二截取的区域相对于原图像素点而言来获取图片,而不是已经放大之后的。

由于项目是采用winform来实现的,我们先看下设计图,你们可以根据需求来设计自己的UI界面。图中的设计图片和源码会附在篇尾链接地址。

为了实现这个功能我们还需要一张数据库表来存储信息,这个方便用户在不同的电脑登录同样可以保留之前的设置。这两个表的设计字段及说明如下:

ID VARCHAR(16),PK --个人信息设置
UserId VARCHAR(16),--用户ID
PType INT,--设置类型 大类 1表示提醒设置 2表示常用设置 3通讯设置 4文档设置 5系统待机时间 6用户皮肤设置 7用户皮肤设置(自定义图像)
PChild INT,--个人设置子类【针对提醒设置而言 1代表任务栏出现提醒 2代表启动默认界面】、【针对常用设置 1代表客户统计服务 2代表业绩及财务分析 3代表行为统计管理 4代表经营统计报表 5代表日志及审核管理 6代表捷径体系核算】、【针对通讯设置 1代表新消息通知 2代表聊天设置】、【针对文档设置 1代表新文件提醒】、【针对系统待机时间 1代表自定义系统时间】、【针对用户皮肤设置 1代表纯色设置 2代表是系统定义图片 3代表是使用天气 4代表使用用户自定义图像 】
DetailSetting INT,--子类详细设置 设置规则是以数字相加  最低数字是1 从左到右 从上到下
FilePath VARCHAR(200), --针对用户皮肤设置 此项数据为服务器图片文件位置
FileName VARCHAR(64),--针对用户皮肤设置 此项数据图片名称

由于这个是个人的所有中设置信息缓存,且我们今天讲的时候用户皮肤设置。当PType为6且PChild为1,DetailSetting 存储的是色块的RGB值。若我们设置的自定义图片,那我们的文件下载实现代码如下:

  #region  下载图片
        /// <summary>
        /// 下载图片
        /// </summary>
        /// <param name="fileServerPath">服务器文件所在位置</param>
        /// <param name="fileImagePath">文件存放所在位置</param>
        /// <returns></returns>
        public bool DownFileImage(string fileServerPath, string fileImagePath)
        {
            bool result2 = false;
            try
            {
                Stream filestream = new MemoryStream();
                DownFile downfile = new DownFile();
                downfile.CustomerCode = SCommon.SysParameter.CustomerCode;
                downfile.FileName = fileServerPath;
                DownFileResult result = ClientProxy.Proxy<IFileService>.GetProxyWithWCF.DownLoadFile(downfile);
                bool issuccess = result.IsSuccess;
                string messageStr = result.Message;
                long filesize = result.FileSize;
                filestream = result.FileStream;
                if (issuccess)
                {
                    byte[] buffer = new byte[filesize];
                    FileStream fs = new FileStream(fileImagePath, FileMode.Create, FileAccess.Write);
                    int count;
                    while ((count = filestream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        fs.Write(buffer, 0, count);
                    }
                    fs.Flush();
                    fs.Close();
                    fs.Dispose();
                    result2 = true;
                }
                else
                    result2 = false;
            }
            catch (Exception)
            {
                duiBackground.Image = null;
            }
            return result2;
        }
        #endregion

其实说了那么多,我们还没有进入我们的主题,旺旺皮肤最重要的是自定义图片截取设置。UI设置草图如下,接下来我们来讲讲功能实现代码。

首先将winform的边框设置为无边框模式 this.FormBorderStyle = FormBorderStyle.None;,然后最大化显示 this.MinimumSize = this.MaximumSize = new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);,最后将背景图全屏化处理,如果所选的图片小于屏幕,那么对图片边缘化处理。这边值得注意的是=》我们需要把图片放在缓存picturebox中,为了不影响图片的进程使用,我们需要做如下处理:

  FileStream inputStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            pbTempImage.Image = new Bitmap(inputStream);
            inputStream.Dispose();

上图中的主程序界面移动的时候,那提示框是跟着移动或不显示的,同时需要判断是显示在左边还是右边好,具体的实现代码如下:

 #region  主窗体移动
        Point mouseDownPoint = new Point(); //记录拖拽过程鼠标位置
        bool _IsMove = false;    //判断鼠标在picturebox上移动时,是否处于拖拽过程(鼠标左键是否按下)
        private void pbMainShow_MouseDown(object sender, MouseEventArgs e)
        {
            DSkin.Controls.DSkinPictureBox _PictureBox = (DSkin.Controls.DSkinPictureBox)sender;
            if (e.Button == MouseButtons.Left)
            {
                if (_PictureBox.Name == "pbMainShow")
                    panButton.Visible = false;
                mouseDownPoint.X = Cursor.Position.X;
                mouseDownPoint.Y = Cursor.Position.Y;
                _IsMove = true;
            }
        }

        private void pbMainShow_MouseMove(object sender, MouseEventArgs e)
        {
            DSkin.Controls.DSkinPictureBox _PictureBox = (DSkin.Controls.DSkinPictureBox)sender;
            if (_IsMove)
            {
                int y, x;
                int moveY, moveX;
                moveY = Cursor.Position.Y - mouseDownPoint.Y;
                moveX = Cursor.Position.X - mouseDownPoint.X;
                y = _PictureBox.Location.Y + moveY;
                x = _PictureBox.Location.X + moveX;
                //if (_PictureBox.Name == "pbTempImage")
                //{
                //    if (x <= 0)
                //        x = 1;
                //    else
                //    {
                //        if (x + _PictureBox.Width > Screen.PrimaryScreen.Bounds.Width)
                //            x = Screen.PrimaryScreen.Bounds.Width - _PictureBox.Width;
                //    }
                //    if (y <= 0)
                //        y = 0;
                //    else
                //    {
                //        if (y + _PictureBox.Height > Screen.PrimaryScreen.Bounds.Height)
                //            y = Screen.PrimaryScreen.Bounds.Height - _PictureBox.Height-1;
                //    }
                //}
                _PictureBox.Location = new Point(x, y);
                mouseDownPoint.X = Cursor.Position.X;
                mouseDownPoint.Y = Cursor.Position.Y;
            }
        }

        private void pbMainShow_MouseUp(object sender, MouseEventArgs e)
        {
            DSkin.Controls.DSkinPictureBox _PictureBox = (DSkin.Controls.DSkinPictureBox)sender;
            if (e.Button == MouseButtons.Left)
            {
                _IsMove = false;
                if (_PictureBox.Name == "pbMainShow")
                {
                    panButton.Visible = true;
                    if ((pbMainShow.Location.X + pbMainShow.Width + panButton.Width + 10) >= Screen.PrimaryScreen.Bounds.Width)
                        panButton.Location = new Point(pbMainShow.Location.X - panButton.Width, pbMainShow.Location.Y + 152);
                    else
                        panButton.Location = new Point(pbMainShow.Location.X + pbMainShow.Width, pbMainShow.Location.Y + 152);
                }
            }
        }
        #endregion

控件的移动实现是通过一个控件移动函数来实现的,该函数的完整代码为:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SCommon
{
    /// <summary>
    /// 控件移动并改变大小
    /// </summary>
    public class ControlMove
    {
        private const int BOX_SIZE = 8;
        private Color BOX_COLOR = Color.White;
        private ContainerControl m_container;
        private Control m_control;
        private Label[] lbl = new Label[8];
        private int startl;
        private int startt;
        private int startw;
        private int starth;
        private int startx;
        private int starty;
        private bool dragging;
        private Cursor[] arrArrow = new Cursor[] {Cursors.SizeNWSE, Cursors.SizeNS,
			Cursors.SizeNESW, Cursors.SizeWE, Cursors.SizeNWSE, Cursors.SizeNS,
			Cursors.SizeNESW, Cursors.SizeWE};
        private Cursor oldCursor;

        private const int MIN_SIZE = 20;

        public ControlMove()
        {
            for (int i = 0; i < 8; i++)
            {
                lbl[i] = new Label();
                lbl[i].TabIndex = i;
                lbl[i].FlatStyle = 0;
                lbl[i].BorderStyle = BorderStyle.FixedSingle;
                lbl[i].BackColor = BOX_COLOR;
                lbl[i].Cursor = arrArrow[i];
                lbl[i].Text = "";
                lbl[i].BringToFront();
                lbl[i].MouseDown += new MouseEventHandler(this.lbl_MouseDown);
                lbl[i].MouseMove += new MouseEventHandler(this.lbl_MouseMove);
                lbl[i].MouseUp += new MouseEventHandler(this.lbl_MouseUp);
            }
        }


        public void WireControl(Control ctl)
        {
            ctl.Click += new EventHandler(this.SelectControl);

        }

        /// <summary>
        /// 将一个选择框连接到发送方控件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SelectControl(object sender, EventArgs e)
        {

            if (m_control is Control)
            {
                m_control.Cursor = oldCursor;

                //删除该类附加的任何已存在的事件处理程序
                m_control.MouseDown -= new MouseEventHandler(this.ctl_MouseDown);
                m_control.MouseMove -= new MouseEventHandler(this.ctl_MouseMove);
                m_control.MouseUp -= new MouseEventHandler(this.ctl_MouseUp);

                m_control = null;
            }

            m_control = (Control)sender;
            //添加用于移动所选控件的事件处理程序
            m_control.MouseDown += new MouseEventHandler(this.ctl_MouseDown);
            m_control.MouseMove += new MouseEventHandler(this.ctl_MouseMove);
            m_control.MouseUp += new MouseEventHandler(this.ctl_MouseUp);

            //在控件的容器(表单或图片框)中添加缩放句柄
            for (int i = 0; i < 8; i++)
            {
                m_control.Parent.Controls.Add(lbl[i]);
                lbl[i].BringToFront();
            }

            //位置调整处理控制
            MoveHandles();

            //显示分级处理
            ShowHandles();

            oldCursor = m_control.Cursor;
            m_control.Cursor = Cursors.SizeAll;

        }

        public void Remove()
        {
            HideHandles();
            m_control.Cursor = oldCursor;
        }

        private void ShowHandles()
        {
            if (m_control != null)
            {
                for (int i = 0; i < 8; i++)
                {
                    lbl[i].Visible = true;
                }
            }
        }

        private void HideHandles()
        {
            for (int i = 0; i < 8; i++)
            {
                lbl[i].Visible = false;
            }
        }

        private void MoveHandles()
        {
            int sX = m_control.Left - BOX_SIZE;
            int sY = m_control.Top - BOX_SIZE;
            int sW = m_control.Width + BOX_SIZE;
            int sH = m_control.Height + BOX_SIZE;
            int hB = BOX_SIZE / 2;
            int[] arrPosX = new int[] {sX+hB, sX + sW / 2, sX + sW-hB, sX + sW-hB,
			sX + sW-hB, sX + sW / 2, sX+hB, sX+hB};
            int[] arrPosY = new int[] {sY+hB, sY+hB, sY+hB, sY + sH / 2, sY + sH-hB,
			sY + sH-hB, sY + sH-hB, sY + sH / 2};
            for (int i = 0; i < 8; i++)
                lbl[i].SetBounds(arrPosX[i], arrPosY[i], BOX_SIZE, BOX_SIZE);
        }
        private void lbl_MouseDown(object sender, MouseEventArgs e)
        {
            dragging = true;
            startl = m_control.Left;
            startt = m_control.Top;
            startw = m_control.Width;
            starth = m_control.Height;
            HideHandles();
        }
        private void lbl_MouseMove(object sender, MouseEventArgs e)
        {
            int l = m_control.Left;
            int w = m_control.Width;
            int t = m_control.Top;
            int h = m_control.Height;
            if (dragging)
            {
                switch (((Label)sender).TabIndex)
                {
                    case 0: // 拖动左上的分级箱
                        l = startl + e.X < startl + startw - MIN_SIZE ? startl + e.X : startl + startw - MIN_SIZE;
                        t = startt + e.Y < startt + starth - MIN_SIZE ? startt + e.Y : startt + starth - MIN_SIZE;
                        w = startl + startw - m_control.Left;
                        h = startt + starth - m_control.Top;
                        break;
                    case 1: // 拖动上方分级箱
                        t = startt + e.Y < startt + starth - MIN_SIZE ? startt + e.Y : startt + starth - MIN_SIZE;
                        h = startt + starth - m_control.Top;
                        break;
                    case 2: // 拖动右上的分级箱
                        w = startw + e.X > MIN_SIZE ? startw + e.X : MIN_SIZE;
                        t = startt + e.Y < startt + starth - MIN_SIZE ? startt + e.Y : startt + starth - MIN_SIZE;
                        h = startt + starth - m_control.Top;
                        break;
                    case 3: // 拖动右侧中间大小的盒子
                        w = startw + e.X > MIN_SIZE ? startw + e.X : MIN_SIZE;
                        break;
                    case 4: // 拖动右下角大小的盒子
                        w = startw + e.X > MIN_SIZE ? startw + e.X : MIN_SIZE;
                        h = starth + e.Y > MIN_SIZE ? starth + e.Y : MIN_SIZE;
                        break;
                    case 5: // 拖动中下部分级箱
                        h = starth + e.Y > MIN_SIZE ? starth + e.Y : MIN_SIZE;
                        break;
                    case 6: //拖动左下部分级箱
                        l = startl + e.X < startl + startw - MIN_SIZE ? startl + e.X : startl + startw - MIN_SIZE;
                        w = startl + startw - m_control.Left;
                        h = starth + e.Y > MIN_SIZE ? starth + e.Y : MIN_SIZE;
                        break;
                    case 7: // 拖动左中部分级箱
                        l = startl + e.X < startl + startw - MIN_SIZE ? startl + e.X : startl + startw - MIN_SIZE;
                        w = startl + startw - m_control.Left;
                        break;
                }
                l = (l < 0) ? 0 : l;
                t = (t < 0) ? 0 : t;
                m_control.SetBounds(l, t, w, h);
            }
        }
        private void lbl_MouseUp(object sender, MouseEventArgs e)
        {
            dragging = false;
            MoveHandles();
            ShowHandles();
        }

        private void ctl_MouseDown(object sender, MouseEventArgs e)
        {
            dragging = true;
            startx = e.X;
            starty = e.Y;
            HideHandles();
        }
        private void ctl_MouseMove(object sender, MouseEventArgs e)
        {
            if (dragging)
            {
                int l = m_control.Left + e.X - startx;
                int t = m_control.Top + e.Y - starty;
                int w = m_control.Width;
                int h = m_control.Height;
                l = (l < 0) ? 0 : ((l + w > m_control.Parent.ClientRectangle.Width) ?
                  m_control.Parent.ClientRectangle.Width - w : l);
                t = (t < 0) ? 0 : ((t + h > m_control.Parent.ClientRectangle.Height) ?
                m_control.Parent.ClientRectangle.Height - h : t);
                m_control.Left = l;
                m_control.Top = t;
            }
        }
        private void ctl_MouseUp(object sender, MouseEventArgs e)
        {
            dragging = false;
            MoveHandles();
            ShowHandles();
        }
    }
}

调用注册方法为:   ControlMove _ControlMove = new ControlMove();  _ControlMove.WireControl(pbTempImage);

接下来我们讲讲核心实现函数,图片边缘化处理以及获取截取图片信息保存,第一步实例化一个Bitmap图片,待会对此进行边缘处理,我们这边直接贴出代码:

   #region 背景图处理
            Bitmap _Bitmap = new Bitmap(pbTempImage.Image);
            pixelColor = _Bitmap.GetPixel(_Bitmap.Width - 10, 40);
            TempImageWidth = _Bitmap.Width;
            TempImageHeight = _Bitmap.Height;
            var finalImg = new Bitmap(pbTempImage.Width, pbTempImage.Height);
            Graphics g = Graphics.FromImage(finalImg);
            g.Clear(pixelColor);

            Bitmap _image = DealwithImage.SetEdgeBlur(_Bitmap, pixelColor, 20, DealwithImage.BLURSTYLE.TOP);
            _image = DealwithImage.SetEdgeBlur(_image, pixelColor, 20, DealwithImage.BLURSTYLE.BOTTOM);
            _image = DealwithImage.SetEdgeBlur(_image, pixelColor, 20, DealwithImage.BLURSTYLE.RIGHT);
            _image = DealwithImage.SetEdgeBlur(_image, pixelColor, 20, DealwithImage.BLURSTYLE.LEFT);
            g.DrawImage(_image, new Point(0, 0));
            g.Dispose();
            _image.Dispose();
            pbTempImage.Image = finalImg;
            #endregion

DealwithImage是一个功能处理函数,完整的实现代码为:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SCommon
{
  public  class DealwithImage
    {
        public enum BLURSTYLE
        {
            TOP, LEFT, RIGHT, BOTTOM
        }
        /// <summary>
        /// 边缘虚化
        /// </summary>
        /// <param name="bitmap">图像路径</param>
        /// <param name="backColor">虚化颜色</param>
        /// <param name="blurRange">虚化的高度</param>
        /// <param name="blurStyle">虚化位置</param>
        /// <returns></returns>
        public static Bitmap SetEdgeBlur(string imagePath, Color backColor, int blurRange, BLURSTYLE blurStyle)
        {
            Bitmap b = new Bitmap(imagePath);
            Graphics g = Graphics.FromImage(b);
            Rectangle rect = new System.Drawing.Rectangle(b.Width - blurRange, 0, blurRange, b.Height);
            switch (blurStyle)
            {
                case BLURSTYLE.TOP:
                    {
                        rect = new System.Drawing.Rectangle(0, 0, b.Width, blurRange);
                        using (LinearGradientBrush brush = new LinearGradientBrush(rect, backColor, Color.FromArgb(0, backColor), LinearGradientMode.Vertical))
                        {
                            g.FillRectangle(brush, rect);
                        }
                    }
                    break;
                case BLURSTYLE.LEFT:
                    {
                        rect = new System.Drawing.Rectangle(0, 0, blurRange, b.Height);
                        using (LinearGradientBrush brush = new LinearGradientBrush(rect, backColor, Color.FromArgb(0, backColor), LinearGradientMode.Horizontal))
                        {
                            g.FillRectangle(brush, rect);
                        }
                    }
                    break;
                case BLURSTYLE.RIGHT:
                    {
                        rect = new System.Drawing.Rectangle(b.Width - blurRange, 0, blurRange, b.Height);
                        using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.FromArgb(0, backColor), backColor, LinearGradientMode.Horizontal))
                        {
                            g.FillRectangle(brush, rect);
                        }
                    }
                    break;
                case BLURSTYLE.BOTTOM:
                    {
                        rect = new System.Drawing.Rectangle(0, b.Height - blurRange, b.Width, blurRange);
                        using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.FromArgb(0, backColor), backColor, LinearGradientMode.Vertical))
                        {
                            g.FillRectangle(brush, rect);
                        }
                    }
                    break;
                default:
                    break;
            }
            return b;
        }
        /// <summary>
        /// 边缘虚化
        /// </summary>
        /// <param name="bitmap">Bitmap图像</param>
        /// <param name="backColor">虚化颜色</param>
        /// <param name="blurRange">虚化的高度</param>
        /// <param name="blurStyle">虚化位置</param>
        /// <returns></returns>
        public static Bitmap SetEdgeBlur(Bitmap bitmap, Color backColor, int blurRange, BLURSTYLE blurStyle)
        {
            Bitmap b = bitmap;
            Graphics g = Graphics.FromImage(b);
            Rectangle rect = new System.Drawing.Rectangle(b.Width - blurRange, 0, blurRange, b.Height);

            switch (blurStyle)
            {
                case BLURSTYLE.TOP:
                    {
                        rect = new System.Drawing.Rectangle(0, 0, b.Width, blurRange);
                        using (LinearGradientBrush brush = new LinearGradientBrush(rect, backColor, Color.FromArgb(0, backColor), LinearGradientMode.Vertical))
                        {
                            g.FillRectangle(brush, rect);
                        }
                    }
                    break;
                case BLURSTYLE.LEFT:
                    {
                        rect = new System.Drawing.Rectangle(0, 0, blurRange, b.Height);
                        using (LinearGradientBrush brush = new LinearGradientBrush(rect, backColor, Color.FromArgb(0, backColor), LinearGradientMode.Horizontal))
                        {
                            g.FillRectangle(brush, rect);
                        }
                    }
                    break;
                case BLURSTYLE.RIGHT:
                    {
                        rect = new System.Drawing.Rectangle(b.Width - blurRange, 0, blurRange, b.Height);
                        using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.FromArgb(0, backColor), backColor, LinearGradientMode.Horizontal))
                        {
                            g.FillRectangle(brush, rect);
                        }
                    }
                    break;
                case BLURSTYLE.BOTTOM:
                    {
                        rect = new System.Drawing.Rectangle(0, b.Height - blurRange, b.Width, blurRange);
                        using (LinearGradientBrush brush = new LinearGradientBrush(rect, Color.FromArgb(0, backColor), backColor, LinearGradientMode.Vertical))
                        {
                            g.FillRectangle(brush, rect);
                        }
                    }
                    break;
                default:
                    break;
            }
            return b;
        }
    }
}

现在只剩下最后一步了,那就是获取图片并将所选的图片上传至服务其并写入信息。步骤为:保存所选区域的图片、上传文件、写入数据、背景图切换、关闭皮肤设置。这边的实现代码比较简单,我就不再详细解释,直接给出这部分实现代码

     #region 获取图片
        /// <summary>
        /// 获取像素颜色
        /// </summary>
        Color pixelColor = new Color();
        /// <summary>
        /// 选取图像宽度
        /// </summary>
        int TempImageWidth = 0;
        /// <summary>
        /// 选取图像高度
        /// </summary>
        int TempImageHeight = 0;
        /// <summary>
        /// 获取图片
        /// </summary>
        private bool GetImage()
        {
            try
            {
                Bitmap bmpOut = new Bitmap(292, 152, PixelFormat.Format24bppRgb);
                Graphics g = Graphics.FromImage(bmpOut);              
                if ((pbMainShow.Location.X > pbTempImage.Location.X) && (pbTempImage.Width + pbTempImage.Location.X > (pbMainShow.Location.X + pbMainShow.Width)) && (pbMainShow.Location.Y > pbTempImage.Location.Y) && (pbTempImage.Location.Y + pbTempImage.Height) > pbMainShow.Location.Y + 152)
                {
                    RectangleF destRect = new Rectangle(0, 0, 292, 152);
                    Rectangle srcRect = new Rectangle(pbMainShow.Location.X, pbMainShow.Location.Y, 292, 152);
                    g.DrawImage(pbTempImage.Image, destRect, srcRect, GraphicsUnit.Pixel);
                }
                else
                    g.Clear(pixelColor);
                g.Dispose();            
                string fileImagePath = System.Windows.Forms.Application.StartupPath + @"\Img\Skin\" + SCommon.UserLogin.UserInfo.GUID + @"\";
                if (!System.IO.Directory.Exists(fileImagePath))
                    System.IO.Directory.CreateDirectory(fileImagePath);
                string fileName = System.DateTime.Now.ToString("yyyyMMddmmffff") + ".jpeg";
                fileImagePath = fileImagePath + fileName;
                bmpOut.Save(fileImagePath);           
                using (Stream fs = new FileStream(fileImagePath, FileMode.Open, FileAccess.Read))//上传图片
                {
                    UpFile filestream = new UpFile();
                    filestream.CustomerCode = SCommon.SysParameter.CustomerCode;
                    filestream.CustomerCode = SCommon.SysParameter.CustomerCode;
                    filestream.FileName = fileName;
                    filestream.FileSize = fs.Length;
                    filestream.FileStream = fs;
                    filestream.DictoryName = @"\Photo\{0}\Skin\" + SCommon.UserLogin.UserInfo.GUID + @"\";
                    filestream.IsCopy = false;
                    UpFileResult result = ClientProxy.Proxy<IDAL.IFileService>.GetProxyWithWCF.UpLoadFile(filestream);
                    if (result.IsSuccess)
                    {
                        PersonalSetting _PersonalSetting = new PersonalSetting();
                        _PersonalSetting.ID = SCommon.Guid16.GetGuid16();
                        _PersonalSetting.UserId = SCommon.UserLogin.UserInfo.GUID;
                        _PersonalSetting.PType = 7;
                        _PersonalSetting.PChild = 1;
                        _PersonalSetting.DetailSetting = 1;
                        _PersonalSetting.BackUp1 = result.Message;
                        _PersonalSetting.BackUp2 = fileName;
                        if (ClientProxy.Proxy<IDAL.IPersonalSetting>.GetProxyWithWCF.Insert(SCommon.SysParameter.CustomerCode,_PersonalSetting) > 0)
                        {
                            SCommon.UserLogin.SkinSettingModel.BackUp1 = result.Message;
                            SCommon.UserLogin.SkinSettingModel.BackUp2 = fileName;
                            SCommon.UserLogin.SkinSettingModel.PChild = 4;
                            SCommon.UserLogin.SkinSettingModel.DetailSetting = 1;
                            if (ClientProxy.Proxy<IDAL.IPersonalSetting>.GetProxyWithWCF.Update(SCommon.SysParameter.CustomerCode,SCommon.UserLogin.SkinSettingModel) > 0)
                            {
                                SimpleSystem.Common.BackPublicForm.PublicFrMain.TopBackGroundImage = bmpOut;
                                SimpleSystem.Common.BackPublicForm.PublicFrMain.IsSetImage = true;
                                return true;
                            }
                        }
                        else
                            SCommon.MessageBoxShow.Show("数据写入失败,请重新操作!!", "错误提示", SCommon.PublicMessageBoxButtons.OK, SCommon.PublicMessageBoxIcon.Error);
                    }
                    else
                        SCommon.MessageBoxShow.Show("图片上传失败,请重试上传!!", "错误提示", SCommon.PublicMessageBoxButtons.OK, SCommon.PublicMessageBoxIcon.Error);
                }
                bmpOut.Dispose();
            }
            catch (Exception ex)
            {
                SCommon.MessageBoxShow.Show("图片上传失败,请重试上传,错误信息如下:" + ex.Message, "错误提示", SCommon.PublicMessageBoxButtons.OK, SCommon.PublicMessageBoxIcon.Error);
            }
            return false;
        }
        #endregion

至此下半部分已经写完,时间比较紧凑,没有详细写。所有的源码和文件点击链接即可下载,国庆节快乐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值