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