資源簡介
非“按角度旋轉”,實現的是立體旋轉。
實現QQ旋轉窗體功能,窗口為不規則圖像,打開時旋轉180度展示。
原本只需1個窗體直接可實現旋轉功能,但由于窗體模糊透明陰影旋轉無法處理,
所以采用2個窗體次序顯示:
首先第一個窗體截取屏幕為窗體的背景,進行旋轉,再打開第二個窗體顯示,同時關閉第1個窗體。
2個窗體均為圖像,顯示一致,第2個多加了點擊,第一個只是圖像顯示和旋轉。
原理:實際是制作立方體進行旋轉,在立方體表面添加圖像,鼠標點擊時判斷位置進行響應,
前面寫的例子關于圖形窗體的點擊操作已經有完整的示例(http://www.haolizi.net/example/view_12149.html)。
目錄中含有DLL的源碼和例子,就是立方體的旋轉,根據此例子,修改了DLL代碼重新進行了編譯。
此DLL源碼和示例較簡單,可直接應用到你的程序里面,可實現立體上下旋轉、傾斜旋轉等等。
實現QQ旋轉窗體功能,窗口為不規則圖像,打開時旋轉180度展示。
原本只需1個窗體直接可實現旋轉功能,但由于窗體模糊透明陰影旋轉無法處理,
所以采用2個窗體次序顯示:
首先第一個窗體截取屏幕為窗體的背景,進行旋轉,再打開第二個窗體顯示,同時關閉第1個窗體。
2個窗體均為圖像,顯示一致,第2個多加了點擊,第一個只是圖像顯示和旋轉。
原理:實際是制作立方體進行旋轉,在立方體表面添加圖像,鼠標點擊時判斷位置進行響應,
前面寫的例子關于圖形窗體的點擊操作已經有完整的示例(http://www.haolizi.net/example/view_12149.html)。
目錄中含有DLL的源碼和例子,就是立方體的旋轉,根據此例子,修改了DLL代碼重新進行了編譯。
此DLL源碼和示例較簡單,可直接應用到你的程序里面,可實現立體上下旋轉、傾斜旋轉等等。
程序中如有立方面的圖像放反或錯位,調整一下角度RotateFlip(RotateFlipType.Rotate90FlipXY);
時間有限,程序寫的較粗陋,顯示效果自行修改調整添加。
壓縮文件里還有一種更簡單的方式,沒來得及修改,參考,步驟和上面一樣。
說明:
public partial class Form1 : Form { YLScsDrawing.Drawing3d.Cuboid cub = new YLScsDrawing.Drawing3d.Cuboid(400, 300, 1); //立方體的寬度400、高度300、厚度1,因為旋轉的是一幅圖片,所以厚度為1 YLScsDrawing.Drawing3d.Camera cam = new YLScsDrawing.Drawing3d.Camera(); Bitmap[] bmp = new Bitmap[6]; public Form1() ............. .....重新寫了個旋轉函數
private void Roti (int speed,int thd) //速度和延時 { for (int i=0;i<speed;i ) { YLScsDrawing.Drawing3d.Quaternion q = new YLScsDrawing.Drawing3d.Quaternion(); q.FromAxisAngle(new YLScsDrawing.Drawing3d.Vector3d(0, 1, 0), 5 * Math.PI / (speed*5)); cub.RotateAt(cub.Center, q); Invalidate(); Application.DoEvents(); Thread.Sleep(thd); } }
例如Roti(5, 1);根據圖片大小設置,圖像越大,值設置越小
例如在窗體內旋轉圖片,完整代碼
public partial class Form1 : Form { YLScsDrawing.Drawing3d.Cuboid cub = new YLScsDrawing.Drawing3d.Cuboid(400, 300, 1); YLScsDrawing.Drawing3d.Camera cam = new YLScsDrawing.Drawing3d.Camera(); Bitmap[] bmp = new Bitmap[6]; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { cub.Center = new YLScsDrawing.Drawing3d.Point3d(200, 200, 0); //窗體內位置 cam.Location = new YLScsDrawing.Drawing3d.Point3d(200, 200, -500); bmp[0] = (Bitmap)Image.FromFile("wfm.png"); bmp[5] = (Bitmap)Image.FromFile("wfm.png");//可以用不同的圖片 bmp[5].RotateFlip(RotateFlipType.Rotate90FlipXY);//立方面的圖像是反的,放正它 cub.FaceImageArray = bmp; cub.DrawingLine = false; cub.DrawingImage = true; cub.FillingFace = true; //Invalidate(); } private void Form1_Paint(object sender, PaintEventArgs e) { cub.Draw(e.Graphics, cam); } private void button1_Click(object sender, EventArgs e) { Roti(5, 1); //圖片較大400的,所以用5, } private void Roti (int speed,int thd) { for (int i=0;i<speed;i ) { YLScsDrawing.Drawing3d.Quaternion q = new YLScsDrawing.Drawing3d.Quaternion(); q.FromAxisAngle(new YLScsDrawing.Drawing3d.Vector3d(0, 1, 0), 5 * Math.PI / (speed*5)); cub.RotateAt(cub.Center, q); Invalidate(); Application.DoEvents(); Thread.Sleep(thd); } } }
壓縮文件里的另一種方法,可以實現窗體內任意控件的立體旋轉,但在處理透明模糊陰影上沒法處理,不能當做窗體,再想想辦法。
代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.ComponentModel;
using?System.Data;
using?System.Drawing;
using?System.Text;
using?System.Windows.Forms;
namespace?WindowsApplication1
{
????public?partial?class?Form1?:?Form
????{
????????public?Form1()
????????{
????????????InitializeComponent();
????????}
????????//orientation
????????int?cameraX=0?cameraY=0?cameraZ=0?cubeX=0?cubeY=0?cubeZ=0;
????????YLScsDrawing.Drawing3d.Cuboid?cub?=?new?YLScsDrawing.Drawing3d.Cuboid(150?150?150);
????????YLScsDrawing.Drawing3d.Camera?cam?=?new?YLScsDrawing.Drawing3d.Camera();
????????private?void?Form1_Load(object?sender?EventArgs?e)
????????{
????????????
????????????cub.Center?=?new?YLScsDrawing.Drawing3d.Point3d(400?240?0);
????????????cam.Loca
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????..A..H.?????90624??2017-10-13?17:12??窗體旋轉\修改dll代碼\.vs\YLScsDrawing\v14\.suo
?????文件??????23461??2017-10-11?21:30??窗體旋轉\修改dll代碼\WindowsApplication1\bin\Debug\2.jpg
?????文件??????23552??2017-10-11?22:25??窗體旋轉\修改dll代碼\WindowsApplication1\bin\Debug\WindowsApplication1.exe
?????文件??????34304??2017-10-11?22:25??窗體旋轉\修改dll代碼\WindowsApplication1\bin\Debug\WindowsApplication1.pdb
?????文件??????21680??2017-10-13?17:11??窗體旋轉\修改dll代碼\WindowsApplication1\bin\Debug\WindowsApplication1.vshost.exe
?????文件????????490??2017-03-19?05:00??窗體旋轉\修改dll代碼\WindowsApplication1\bin\Debug\WindowsApplication1.vshost.exe.manifest
?????文件??????21504??2017-10-11?22:18??窗體旋轉\修改dll代碼\WindowsApplication1\bin\Debug\YLScsDrawing.dll
?????文件??????69120??2017-10-11?22:18??窗體旋轉\修改dll代碼\WindowsApplication1\bin\Debug\YLScsDrawing.pdb
?????文件???????9799??2017-10-11?22:25??窗體旋轉\修改dll代碼\WindowsApplication1\Form1.cs
?????文件??????31487??2017-10-11?22:01??窗體旋轉\修改dll代碼\WindowsApplication1\Form1.Designer.cs
?????文件???????5814??2017-10-11?22:01??窗體旋轉\修改dll代碼\WindowsApplication1\Form1.resx
?????文件????????486??2009-04-11?06:30??窗體旋轉\修改dll代碼\WindowsApplication1\Program.cs
?????文件???????1292??2009-04-11?06:30??窗體旋轉\修改dll代碼\WindowsApplication1\Properties\AssemblyInfo.cs
?????文件???????2878??2017-10-11?21:40??窗體旋轉\修改dll代碼\WindowsApplication1\Properties\Resources.Designer.cs
?????文件???????5612??2009-04-11?06:30??窗體旋轉\修改dll代碼\WindowsApplication1\Properties\Resources.resx
?????文件???????1119??2017-10-11?21:40??窗體旋轉\修改dll代碼\WindowsApplication1\Properties\Settings.Designer.cs
?????文件????????249??2009-04-11?06:30??窗體旋轉\修改dll代碼\WindowsApplication1\Properties\Settings.settings
?????文件???????3777??2017-10-11?21:40??窗體旋轉\修改dll代碼\WindowsApplication1\WindowsApplication1.csproj
?????文件??????21504??2017-10-11?22:18??窗體旋轉\修改dll代碼\YLScsDrawing\bin\Debug\YLScsDrawing.dll
?????文件??????69120??2017-10-11?22:18??窗體旋轉\修改dll代碼\YLScsDrawing\bin\Debug\YLScsDrawing.pdb
?????文件???????3211??2009-04-18?03:47??窗體旋轉\修改dll代碼\YLScsDrawing\Drawing3d\Camera.cs
?????文件???????4102??2017-10-11?22:18??窗體旋轉\修改dll代碼\YLScsDrawing\Drawing3d\Cuboid.cs
?????文件???????1935??2009-04-18?03:43??窗體旋轉\修改dll代碼\YLScsDrawing\Drawing3d\Point3d.cs
?????文件???????3305??2009-04-19?05:48??窗體旋轉\修改dll代碼\YLScsDrawing\Drawing3d\Quaternion.cs
?????文件???????1439??2009-04-19?06:53??窗體旋轉\修改dll代碼\YLScsDrawing\Drawing3d\Shape3d.cs
?????文件???????2753??2009-04-15?05:32??窗體旋轉\修改dll代碼\YLScsDrawing\Drawing3d\Vector3d.cs
?????文件???????3262??2009-05-09?13:06??窗體旋轉\修改dll代碼\YLScsDrawing\Geometry\Vector.cs
?????文件???????7838??2009-05-15?05:15??窗體旋轉\修改dll代碼\YLScsDrawing\Imaging\Filters\FreeTransform.cs
?????文件???????6223??2009-04-11?05:35??窗體旋轉\修改dll代碼\YLScsDrawing\Imaging\ImageData.cs
?????文件???????5920??2017-10-13?17:11??窗體旋轉\修改dll代碼\YLScsDrawing\obj\Debug\DesignTimeResolveAssemblyReferencesInput.cache
............此處省略143個文件信息
評論
共有 條評論