滚动照片抽奖软件

CODE

GitHub 源码

1、女友说很丑的一个软件

说个最近的事情,女友公司过年了要搞活动,需要个抽奖的环节,当时就问我能不能给做一个,正好我也没啥事儿,就在周末的时候用C#做了一个,虽然派上用场了,不过被说丑也是挺无语的……

2、丑也要说

虽然心里想的这个软件很简单,但是真正编程也花了5个小时,主要在怎样做好看上犹豫的太久,后来索性全都做成可以配置的了,也真是绝了……

3、程序主界面

先把软件界面放出来:

主界面
主界面

抽中某某某的样子
抽中某某某的样子

使用帮助
使用帮助

根本也没用什么随机之类的算法,直接用的是Timer控件,噼里啪啦一顿循环,按 “空格” 或者 “回车” 都可以 “开始/暂停”,简单暴力。抽中后,可以把抽中的人删除掉,双击照片,或者直接按键盘 “DEL”(随意大小写)就可以删掉这个人了,下次就不会重复出现了……当然,可以重置所有的列表,跟着使用帮助就可以了。

4、配置文件

界面控件位置(控件在运行期间是可以移动的,自动保存移动位置)
界面控件位置(控件在运行期间是可以移动的,自动保存移动位置)

软件配置
软件配置

配置文件的详细解释:

[Strings]
FormName=这真的是一个抽奖软件 '窗口名'
Title=这真的是一个抽奖软件 '标题文本'
[Color]
MottoText=#ffffff '段落文本的颜色'
TitleText=#ffffff '标题的颜色'
[FontStyle]
Motto=华文楷体 '段落文本的字体'
Title=华文楷体 '标题的字体'
[FontSize]
Title=20 '标题的字号'
Motto=12 '段落文本的字号'
[FormSize]
MainFormWidth=1000 '窗口宽'
MainFormHeight=600 '窗口高'
[Interval]
Rolling=50 '图片滚动间隔:毫秒'

5、主界面上的图片也是可以修改的

主界面图片源
主界面图片源

目录Images文件夹中的图片,是主界面显示的:背景、Logo以及空闲状态的照片,可以修改成自己想要的样子。

6、至于如何把照片放到程序里

想要滚动的照片,放到Box文件夹中,如果有文本要显示,取和图片相同文件名,后缀为.txt就可以了:

要滚动的照片放在这里
要滚动的照片放在这里

对于一些大图片来说,动辄就是几M,也并不能让用户来压缩成小图片,所以我就自行处理成缩略图了,以免在程序中加载图片太大造成的卡顿,当然对于这个文件夹的操作 “什么都不用管,什么都不用管,什么都不用管”:

图片的缩略图处理
图片的缩略图处理

7、关于绘图过程的双缓冲

在拖动控件的时候或者绘图的过程中,会有些闪动的情况发生,需要在窗体构造的时候开启双缓冲即可:

            SetStyle(ControlStyles.UserPaint, true);SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.  SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲 

8、关于缩略图的生成

之前忘了是从哪里收集的一个图片处理的工具类:

    public class ImageHelper{/// <summary> /// 生成缩略图 /// </summary> /// <param name="originalImagePath">源图路径(物理路径)</param> /// <param name="thumbnailPath">缩略图路径(物理路径)</param> /// <param name="width">缩略图宽度</param> /// <param name="height">缩略图高度</param> /// <param name="mode">生成缩略图的方式</param>     public static bool MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode){Image originalImage = Image.FromFile(originalImagePath);int towidth = width;int toheight = height;int x = 0;int y = 0;int ow = originalImage.Width;int oh = originalImage.Height;switch (mode){case "HW"://指定高宽缩放(可能变形)                 break;case "W"://指定宽,高按比例                     toheight = originalImage.Height * width / originalImage.Width;break;case "H"://指定高,宽按比例 towidth = originalImage.Width * height / originalImage.Height;break;case "Cut"://指定高宽裁减(不变形)                 if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight){oh = originalImage.Height;ow = originalImage.Height * towidth / toheight;y = 0;x = (originalImage.Width - ow) / 2;}else{ow = originalImage.Width;oh = originalImage.Width * height / towidth;x = 0;y = (originalImage.Height - oh) / 2;}break;default:break;}//新建一个bmp图片 Image bitmap = new System.Drawing.Bitmap(towidth, toheight);//新建一个画板 Graphics g = System.Drawing.Graphics.FromImage(bitmap);//设置高质量插值法 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;//设置高质量,低速度呈现平滑程度 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;//清空画布并以透明背景色填充 g.Clear(Color.Transparent);//在指定位置并且按指定大小绘制原图片的指定部分 g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),new Rectangle(x, y, ow, oh),GraphicsUnit.Pixel);try{//以jpg格式保存缩略图 bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);return true;}catch (System.Exception e){return false;//throw e;}finally{originalImage.Dispose();bitmap.Dispose();g.Dispose();}}/// <summary>/// 逆时针旋转图像/// </summary>/// <param name="originalImagePath">原始图像路径</param>/// <param name="saveImagePath">保存图像的路径</param>/// <param name = "angle" > 旋转角度[0, 360](前台给的) </ param >/// <returns></returns>public static bool RotateImg(string originalImagePath, string saveImagePath, int angle){Image originalImage = Image.FromFile(originalImagePath);angle = angle % 360;//弧度转换  double radian = angle * Math.PI / 180.0;double cos = Math.Cos(radian);double sin = Math.Sin(radian);//原图的宽和高  int w = originalImage.Width;int h = originalImage.Height;int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin)));int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos)));//目标位图  Bitmap saveImage = new Bitmap(W, H);Graphics g = Graphics.FromImage(saveImage);g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;//计算偏移量  Point Offset = new Point((W - w) / 2, (H - h) / 2);//构造图像显示区域:让图像的中心与窗口的中心点一致  Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h);Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2);g.TranslateTransform(center.X, center.Y);g.RotateTransform(360 - angle);//恢复图像在水平和垂直方向的平移  g.TranslateTransform(-center.X, -center.Y);g.DrawImage(originalImage, rect);//重至绘图的所有变换  g.ResetTransform();g.Save();//保存旋转后的图片  originalImage.Dispose();try{saveImage.Save(saveImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);return true;}catch (Exception e) { return false; }finally{originalImage.Dispose();saveImage.Dispose();g.Dispose();}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/353373.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

商场抽奖软件 android,召唤抽奖系统3.0正式版

召唤抽奖系统3.0正式版是一款全新打造的二次元题材的剧情玩法的手机游戏。玩家们在游戏中可以通过探索剧情&#xff0c;来收集很多的人物角色&#xff0c;同时也可以通过召唤来获得更加强大的技能人物。3D技术打造的游戏场景设计风格&#xff0c;让玩家们可以感受到更加真实的游…

商场抽奖软件 android,召唤抽奖系统

召唤抽奖系统是一款角色扮演类手游&#xff0c;召唤抽奖系统游戏背景设定在神武大陆&#xff0c;游戏中玩家从现代社会穿越到一个婴儿身上&#xff0c;16年后玩家要踏下旅程&#xff0c;学习魔法和武道&#xff0c;你可以通过主线&#xff0c;支线&#xff0c;以及召唤线来推进…

星韵转盘抽奖软件

星韵转盘抽奖软件是一款功能强大&#xff0c;且适用于单位年会、晚会、婚庆、商场、房地产、楼盘、超市、娱乐会所等多种抽奖摇号场合的轮盘抽奖软件&#xff0c;该软件以新颖独特的抽奖方式&#xff0c;完美的取代了传统大转盘的抽奖方式&#xff0c;还拥有强大的转盘模板编辑…

星韵商场抽奖软件

星韵商场抽奖软件是一款非常专业&#xff0c;且适用于各种商业促销活动的抽奖软件&#xff0c;不但可以通过新颖的抽奖方式来取代传统抽奖箱的抽奖方式&#xff0c;如砸蛋、百宝箱、气球、彩球、礼盒等多种抽奖模式&#xff0c;而且还有着强大的奖项设置功能和灵活控制奖品的开…

爆点火箭逃跑游戏 全程手把手教搭建

这个源码经过本人修复&#xff0c;已经完美运营&#xff0c;并且修复了查看下级代理信息等&#xff0c;邀请页面弹窗&#xff0c;支付接入问题&#xff08;可以对接市面上基本的支付&#xff09;具体的就不介绍了&#xff0c;有搭建教程 我接下来给搭建简单说一下搭建 搭建环境…

火柴人小程序linux,这里居然有火柴人的一些不一样的小程序?要不来玩一下

火柴人还有不一样的玩法&#xff1f;是的&#xff0c;这几个火柴人结合了搭桥&#xff0c;结合了跑酷&#xff0c;结合了划线小游戏&#xff0c;是不是感觉有一些意外呢&#xff1f;小编推荐的这几款关于火柴人的小游戏考验着玩家种种能力&#xff0c;如果你觉得自己对游戏的天…

基于Unity3D的跑酷游戏(火柴人)

项目报告均含&#xff08;此链接&#xff1a;https://download.csdn.net/download/mengchenliuguang/11245411&#xff09; 场景展示 在火柴人的通关路上&#xff0c;我们要注意不让他掉落到深渊。 使用W技能可以连续起跳&#xff0c;起跳到上面地方躲避障碍物。 不小心掉落…

C++ 字符跑酷#5 游戏制作实录

版本号&#xff1a;1.4 嗨&#xff0c;我是一块铌金属。 对的&#xff0c;我期末考试考完了&#xff0c;又闲了。 那就……做游戏吧&#xff01; 首先&#xff0c;为了我们的游戏像德芙一样丝滑&#xff0c;我使用了_kbhit()函数。 这个函数的作用是&#xff1a;判断是否有…

C语言实现钢琴块小游戏(低仿拉胯版)

声明&#xff1a;这篇文章中出现的代码并非凑字数&#xff0c;与叙述内容无关的均已用文字代替&#xff0c;还请耐心阅读 &#xff08;没错俺偷懒直接把作业报告改改&#xff08;其实没怎么改&#xff09;就发出来了&#xff09; &#xff08;虽然说是小游戏&#xff0c;但不知…

用unity做的简单小游戏------“小球酷跑“

游戏介绍: 游戏由小球和障碍物组成&#xff0c;在所布置的游戏背景中进行游戏&#xff0c;如图所示。 游戏主要以控制小球移动躲过障碍物继续行走为玩法&#xff0c;是一个简单的不够完整的小游戏&#xff0c;下面将会简单地介绍在unity中如何制作出这个小游戏。 场景设置: 先…

C++ 字符跑酷#1 游戏制作实录

版本号&#xff1a;1.0 我是~~~oneNBmetel&#xff01;&#xff01;&#xff01;我知道metel错了但我懒得改&#xff08;逃 我们今天来做&#xff01;一个简简单单的C跑酷游戏&#xff01;&#xff01;&#xff01; 首先&#xff0c;既然是做游戏&#xff0c;那头文件是必不…

C++ 字符跑酷#4 游戏制作实录

版本号&#xff1a;1.3 嗨&#xff0c;我是一块铌金属 上次的字符酷跑&#xff0c;我做完之后&#xff0c;还是觉得不太满意&#xff0c;正好&#xff0c;题刷完了&#xff0c;作业也做完了&#xff0c;那就……做游戏吧 但是&#xff0c;在我刚想开一个新坑的时候&#xff…

Java单元测试学习(一)

Java单元测试学习&#xff08;一&#xff09; 使用TestContainer和docker结合启动redis 前提 docker环境 目录结构 依赖—这里有个小插曲 配置RedisTemplate时一直报错Error creating bean with name ‘redisConnectionFactory’ defined in class path resource [org/spr…

地震勘探基础(八)之地震动校正

地震动校正 在地震资料数字处理过程中&#xff0c;速度分析&#xff0c;动校正和水平叠加三个处理内容是相互关联的。水平叠加是为了提高地震资料的信噪比&#xff0c;要想得到好的叠加效果&#xff0c;必须做好动校正。而做好动校正&#xff0c;需要进行准确的速度分析。只有…

独立站卖家如何应对PayPal风险?3大策略教你安全收款!

PayPal是全球风险控制做得最好的第三方在线支付平台&#xff0c;PayPal付款是钱直接到卖家PayPal账户。但随着外贸交易的日益发展&#xff0c;恶意买家的问题也越来越多。如何防范风险&#xff0c;保证收款安全&#xff0c;成为独立站卖家们所关注的问题。下面为大家分享三种策…

pyhon的运算符和字符串格式化方式

pyhton的变量类型 这里可以值得一提的是&#xff0c;python是一种弱类型的语言&#xff0c;使用的感觉有些像C的auto变量类型&#xff0c;定义变量不需要写类型名字&#xff0c;只需要变量名就会自动匹配 # int a 10 # float b 10.333 # string c "nihao" # dic…

oracle自定义函数 for in loop示例

1、新建type&#xff0c;就是返回结果集有什么&#xff0c;这里就写什么&#xff08;相当于表的字段&#xff09; CREATE OR REPLACE TYPE "TYPE_NQ_FORM_STATISTICS" as object (recordid varchar2(500),form_name varchar2(200),sortone varchar2(100),sorttwo …

辨别MagicKeyboard的真伪(序列号验证版)

RT 楼主前两天海鲜市场买了一个magic Keyboard, 大概是这个样子的 起来感觉没啥差别&#xff0c;橙色也蛮好。 今天某位大佬告诉我鉴别真假的方法&#xff0c;看了之后我心都凉了 写出来给大家避避坑 将键盘用连接到Mac电脑上&#xff0c;打开系统报告&#xff0c;看USB下面的…

WinMerge使用

1、介绍&#xff1a;是一款运行于Windows系统下的免费开源的文件比较/合并工具&#xff0c;使用它可以非常方便地比较多个文档内容甚至是文件夹与文件夹之间的文件差异。 2、对于测试人员的作用&#xff1a;可以用来比较测试数据内容&#xff0c;如在进行回归测试报表数据的时…

windows系统上使用magic trackpad妙控触摸板

windows系统上使用magic trackpad妙控触摸板 另外出自用全新 jd自营随时可以全保换新 jd自营购买的 apple magic trakpad 妙控板 还有保险 随时可换新 前言 最近在家学习很少打游戏&#xff0c;想了一下翻出了我箱子里我之前mac mini用的trackpad&#xff0c;因为我之前的笔…