C#绘制手提袋效果和光盘效果

123 篇文章 2 订阅
62 篇文章 1 订阅

 最近实现了C#绘制手提袋效果和光盘效果:
(1)
手提袋效果
代码:
 BagPackageEffect bpe = new BagPackageEffect();
 bpe.IsUseSamePhoto = false;
 bpe.UserPhotoFileName = @"D:/20070520011714942.jpg";
 bpe.ImageLeftSideFileName = @"D:/20070419171728790.jpg";
 bpe.BgColor = Color.Transparent;
 bpe.FrontFaceBgColor = Color.DarkOrange;
 bpe.LeftSideBgColor = Color.Bisque;

 m_Bitmap = (Bitmap)bpe.Draw();
 bpe.Dispose();

(2)光盘效果:
光盘效果
 Disk disk = new Disk();
 disk.IsUseBgImage = false;
 disk.BgColor = Color.Black;
 disk.ImageBgFileName = @"D:/20070520023536133.jpg";
 disk.BorderColor = Color.Black;
 disk.BorderWidth = 1;
 disk.BorderInnerPen = new Pen(Color.Red, 1);
 disk.DiskBorderBrush = new LinearGradientBrush(new Rectangle(0, 0, 1000, 1000), Color.White, Color.Gray, 45f, true);
 disk.IsUseContentImage = true;
 disk.ImageContentFileName = @"D:/20070520023536133.jpg";
 disk.DiskCenterBrush = new LinearGradientBrush(new Rectangle(0,0,500,500), Color.Red, Color.Orange, 135f);
 
 m_Bitmap = (Bitmap)disk.Draw();
 disk.Dispose();

(3)带背景图片的光盘效果(注意光盘中空部分,对背景而言,它是透明的):
光盘效果(带背景图片)

绘制部分的关键代码:
g.SmoothingMode = SmoothingMode.AntiAlias;
  g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
  if(this._isUseBgImage)
  {
   GraphicsPath gp = new GraphicsPath();
   gp.AddRectangle(new Rectangle(0, 0, 1000, 1000));
   g.DrawImage(FillPhotoInZone((Bitmap)this.ImageBg, gp), 0, 0);
   gp.Dispose();
  }
  else
  {
   g.Clear(this._bgColor);
  }

  //光盘边缘区
  GraphicsPath gpBorder = new GraphicsPath();
  gpBorder.AddEllipse(this.diskBorder_Outer);
  gpBorder.AddEllipse(this.diskBorder_Inner);
  gpBorder.FillMode = FillMode.Alternate;
  g.SetClip(gpBorder);
  g.FillEllipse(this._diskBorderBrush, this.diskBorder_Outer);
  gpBorder.Dispose();
  g.ResetClip();

  //光盘内容区
  GraphicsPath gpContent = new GraphicsPath();
  gpContent.AddEllipse(this.diskBorder_Inner);
  gpContent.AddEllipse(this.diskCenter);
  gpContent.FillMode = FillMode.Alternate;
  g.SetClip(gpContent);
  if(this.IsUseContentImage)
  {
   g.DrawImage(this.ImageContent, this.diskBorder_Inner, new Rectangle(0, 0, this.ImageContent.Width, this.ImageContent.Height), GraphicsUnit.Pixel);
  }
  else
  {
   g.FillEllipse(this._diskContentBrush, this.diskBorder_Inner);
  }
  gpContent.Dispose();
  g.ResetClip();

  //光盘托面区
  GraphicsPath gpBearingSurface = new GraphicsPath();
  gpBearingSurface.AddEllipse(this.diskCenter);
  gpBearingSurface.AddEllipse(this.diskInner);
  gpBearingSurface.FillMode = FillMode.Alternate ;
  g.SetClip(gpBearingSurface);
  _diskCenterBrush = new SolidBrush(Color.FromArgb(160, 255, 255, 255));
  g.FillEllipse(this._diskCenterBrush, this.diskCenter);
  gpBearingSurface.Dispose();
  g.ResetClip ();

  g.DrawEllipse(this._borderPen, this.diskBorder_Outer);
  g.DrawEllipse(this._borderInnerPen, this.diskBorder_Inner);
  g.DrawEllipse(this._borderDiskCenterPen, this.diskCenter);
  g.DrawEllipse(this._borderDiskInnerPen, this.diskInner);

  //g.DrawLine(new Pen(Color.Red, 1), new Point(500,0), new Point(500, 1000));
  //g.DrawLine(new Pen(Color.Red, 1), new Point(0,500), new Point(1000, 500));
 
  //gpDiskInner.Dispose();
  gpBorder.Dispose ();

更多效果将陆续放在http://www.zpxp.com(萝卜鼠在线图形图像处理)中.

已实现了WPF下的手提袋效果:(右边为代码截图)
WPF版的手提袋效果

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C#绘制正态分布效果图可以使用 MathNet.Numerics 库来生成正态分布的数据,并使用 System.Windows.Forms.DataVisualization.Charting 库来绘制图表。 以下是一个绘制正态分布效果图的示例代码: ```C# using System; using System.Windows.Forms.DataVisualization.Charting; using MathNet.Numerics.Distributions; // 创建一个窗体应用程序 public class NormalDistributionForm : Form { private Chart chart; public NormalDistributionForm() { // 初始化窗体和图表控件 this.Text = "Normal Distribution"; this.ClientSize = new System.Drawing.Size(600, 400); this.chart = new Chart(); this.chart.Parent = this; this.chart.Dock = DockStyle.Fill; // 生成正态分布的数据 double[] data = new double[1000]; Normal.Samples(data, 0, 1); // 添加数据到图表中 Series series = this.chart.Series.Add("Normal Distribution"); series.ChartType = SeriesChartType.Line; for (int i = 0; i < data.Length; i++) { series.Points.AddXY(i, data[i]); } // 设置图表的样式 ChartArea area = this.chart.ChartAreas[0]; area.AxisX.MajorGrid.Enabled = false; area.AxisY.MajorGrid.Enabled = false; area.AxisX.Title = "X"; area.AxisY.Title = "Density"; area.AxisX.Minimum = 0; area.AxisX.Maximum = data.Length; area.AxisY.Minimum = -0.5; area.AxisY.Maximum = 1.0; } static void Main() { Application.Run(new NormalDistributionForm()); } } ``` 在这个示例代码中,我们使用 MathNet.Numerics 库中的 Normal 类生成了 1000 个均值为 0,标准差为 1 的正态分布随机数,并将它们添加到了图表中。然后,我们使用 System.Windows.Forms.DataVisualization.Charting 库中的 Chart 控件来绘制这些数据的图表,并设置了图表的样式。 运行这个示例代码,就可以看到一个绘制正态分布效果图的窗口。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值