日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

滚动照片抽奖软件

發布時間:2023/12/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 滚动照片抽奖软件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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();}}}

總結

以上是生活随笔為你收集整理的滚动照片抽奖软件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。