From f3fce53b91bfd4062418a8c6e1e874c646f48006 Mon Sep 17 00:00:00 2001 From: ww-rm Date: Wed, 9 Apr 2025 13:19:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=BC=E5=87=BA=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpineViewer/Forms/SpineViewerForm.Designer.cs | 81 +++++-- SpineViewer/Forms/SpineViewerForm.cs | 224 +++++++++++------- 2 files changed, 197 insertions(+), 108 deletions(-) diff --git a/SpineViewer/Forms/SpineViewerForm.Designer.cs b/SpineViewer/Forms/SpineViewerForm.Designer.cs index 083a171..28c9c31 100644 --- a/SpineViewer/Forms/SpineViewerForm.Designer.cs +++ b/SpineViewer/Forms/SpineViewerForm.Designer.cs @@ -71,6 +71,11 @@ spinePreviewer = new SpineViewer.Controls.SpinePreviewer(); panel_MainForm = new Panel(); toolTip = new ToolTip(components); + toolStripSeparator4 = new ToolStripSeparator(); + toolStripSeparator5 = new ToolStripSeparator(); + toolStripSeparator6 = new ToolStripSeparator(); + toolStripMenuItem_ExportWebp = new ToolStripMenuItem(); + toolStripMenuItem_ExportAvif = new ToolStripMenuItem(); menuStrip.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)splitContainer_MainForm).BeginInit(); splitContainer_MainForm.Panel1.SuspendLayout(); @@ -116,27 +121,27 @@ // toolStripMenuItem_Open.Name = "toolStripMenuItem_Open"; toolStripMenuItem_Open.ShortcutKeys = Keys.Control | Keys.O; - toolStripMenuItem_Open.Size = new Size(254, 34); + toolStripMenuItem_Open.Size = new Size(270, 34); toolStripMenuItem_Open.Text = "打开(&O)..."; toolStripMenuItem_Open.Click += toolStripMenuItem_Open_Click; // // toolStripMenuItem_BatchOpen // toolStripMenuItem_BatchOpen.Name = "toolStripMenuItem_BatchOpen"; - toolStripMenuItem_BatchOpen.Size = new Size(254, 34); + toolStripMenuItem_BatchOpen.Size = new Size(270, 34); toolStripMenuItem_BatchOpen.Text = "批量打开(&B)..."; toolStripMenuItem_BatchOpen.Click += toolStripMenuItem_BatchOpen_Click; // // toolStripSeparator1 // toolStripSeparator1.Name = "toolStripSeparator1"; - toolStripSeparator1.Size = new Size(251, 6); + toolStripSeparator1.Size = new Size(267, 6); // // toolStripMenuItem_Export // - toolStripMenuItem_Export.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_ExportFrame, toolStripMenuItem_ExportFrameSequence, toolStripMenuItem_ExportGif, toolStripMenuItem_ExportMp4, toolStripMenuItem_ExportWebm, toolStripMenuItem_ExportMkv, toolStripMenuItem_ExportMov, toolStripMenuItem_ExportCustom }); + toolStripMenuItem_Export.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem_ExportFrame, toolStripMenuItem_ExportFrameSequence, toolStripSeparator4, toolStripMenuItem_ExportGif, toolStripMenuItem_ExportWebp, toolStripMenuItem_ExportAvif, toolStripSeparator5, toolStripMenuItem_ExportMp4, toolStripMenuItem_ExportWebm, toolStripMenuItem_ExportMkv, toolStripMenuItem_ExportMov, toolStripSeparator6, toolStripMenuItem_ExportCustom }); toolStripMenuItem_Export.Name = "toolStripMenuItem_Export"; - toolStripMenuItem_Export.Size = new Size(254, 34); + toolStripMenuItem_Export.Size = new Size(270, 34); toolStripMenuItem_Export.Text = "导出(&E)"; // // toolStripMenuItem_ExportFrame @@ -198,13 +203,13 @@ // toolStripSeparator2 // toolStripSeparator2.Name = "toolStripSeparator2"; - toolStripSeparator2.Size = new Size(251, 6); + toolStripSeparator2.Size = new Size(267, 6); // // toolStripMenuItem_Exit // toolStripMenuItem_Exit.Name = "toolStripMenuItem_Exit"; toolStripMenuItem_Exit.ShortcutKeys = Keys.Alt | Keys.F4; - toolStripMenuItem_Exit.Size = new Size(254, 34); + toolStripMenuItem_Exit.Size = new Size(270, 34); toolStripMenuItem_Exit.Text = "退出(&X)"; toolStripMenuItem_Exit.Click += toolStripMenuItem_Exit_Click; // @@ -272,7 +277,7 @@ rtbLog.Margin = new Padding(3, 2, 3, 2); rtbLog.Name = "rtbLog"; rtbLog.ReadOnly = true; - rtbLog.Size = new Size(1758, 168); + rtbLog.Size = new Size(1758, 172); rtbLog.TabIndex = 0; rtbLog.Text = ""; rtbLog.WordWrap = false; @@ -296,7 +301,7 @@ splitContainer_MainForm.Panel2.Controls.Add(rtbLog); splitContainer_MainForm.Panel2.Cursor = Cursors.Default; splitContainer_MainForm.Size = new Size(1758, 1097); - splitContainer_MainForm.SplitterDistance = 921; + splitContainer_MainForm.SplitterDistance = 917; splitContainer_MainForm.SplitterWidth = 8; splitContainer_MainForm.TabIndex = 3; splitContainer_MainForm.TabStop = false; @@ -320,7 +325,7 @@ // splitContainer_Functional.Panel2.Controls.Add(groupBox_Preview); splitContainer_Functional.Panel2.Cursor = Cursors.Default; - splitContainer_Functional.Size = new Size(1758, 921); + splitContainer_Functional.Size = new Size(1758, 917); splitContainer_Functional.SplitterDistance = 759; splitContainer_Functional.SplitterWidth = 8; splitContainer_Functional.TabIndex = 2; @@ -344,7 +349,7 @@ // splitContainer_Information.Panel2.Controls.Add(tabControl_Config); splitContainer_Information.Panel2.Cursor = Cursors.Default; - splitContainer_Information.Size = new Size(759, 921); + splitContainer_Information.Size = new Size(759, 917); splitContainer_Information.SplitterDistance = 354; splitContainer_Information.SplitterWidth = 8; splitContainer_Information.TabIndex = 1; @@ -358,7 +363,7 @@ groupBox_SkelList.Dock = DockStyle.Fill; groupBox_SkelList.Location = new Point(0, 0); groupBox_SkelList.Name = "groupBox_SkelList"; - groupBox_SkelList.Size = new Size(354, 921); + groupBox_SkelList.Size = new Size(354, 917); groupBox_SkelList.TabIndex = 0; groupBox_SkelList.TabStop = false; groupBox_SkelList.Text = "模型列表"; @@ -368,7 +373,7 @@ spineListView.Dock = DockStyle.Fill; spineListView.Location = new Point(3, 26); spineListView.Name = "spineListView"; - spineListView.Size = new Size(348, 892); + spineListView.Size = new Size(348, 888); spineListView.SpinePropertyGrid = spinePropertyGrid; spineListView.TabIndex = 0; // @@ -392,7 +397,7 @@ tabControl_Config.Name = "tabControl_Config"; tabControl_Config.Padding = new Point(0, 0); tabControl_Config.SelectedIndex = 0; - tabControl_Config.Size = new Size(397, 921); + tabControl_Config.Size = new Size(397, 917); tabControl_Config.TabIndex = 0; // // tabPage_Previewer @@ -401,7 +406,7 @@ tabPage_Previewer.Location = new Point(4, 4); tabPage_Previewer.Margin = new Padding(0); tabPage_Previewer.Name = "tabPage_Previewer"; - tabPage_Previewer.Size = new Size(389, 878); + tabPage_Previewer.Size = new Size(389, 874); tabPage_Previewer.TabIndex = 0; tabPage_Previewer.Text = "画面参数"; // @@ -412,7 +417,7 @@ groupBox_PreviewConfig.Location = new Point(0, 0); groupBox_PreviewConfig.Margin = new Padding(0); groupBox_PreviewConfig.Name = "groupBox_PreviewConfig"; - groupBox_PreviewConfig.Size = new Size(389, 878); + groupBox_PreviewConfig.Size = new Size(389, 874); groupBox_PreviewConfig.TabIndex = 1; groupBox_PreviewConfig.TabStop = false; groupBox_PreviewConfig.Text = "画面参数"; @@ -423,7 +428,7 @@ propertyGrid_Previewer.HelpVisible = false; propertyGrid_Previewer.Location = new Point(3, 26); propertyGrid_Previewer.Name = "propertyGrid_Previewer"; - propertyGrid_Previewer.Size = new Size(383, 849); + propertyGrid_Previewer.Size = new Size(383, 845); propertyGrid_Previewer.TabIndex = 1; propertyGrid_Previewer.ToolbarVisible = false; propertyGrid_Previewer.PropertyValueChanged += propertyGrid_PropertyValueChanged; @@ -457,7 +462,7 @@ groupBox_Preview.Dock = DockStyle.Fill; groupBox_Preview.Location = new Point(0, 0); groupBox_Preview.Name = "groupBox_Preview"; - groupBox_Preview.Size = new Size(991, 921); + groupBox_Preview.Size = new Size(991, 917); groupBox_Preview.TabIndex = 1; groupBox_Preview.TabStop = false; groupBox_Preview.Text = "预览画面"; @@ -468,7 +473,7 @@ spinePreviewer.Location = new Point(3, 26); spinePreviewer.Name = "spinePreviewer"; spinePreviewer.PropertyGrid = propertyGrid_Previewer; - spinePreviewer.Size = new Size(985, 892); + spinePreviewer.Size = new Size(985, 888); spinePreviewer.SpineListView = spineListView; spinePreviewer.TabIndex = 0; // @@ -486,7 +491,36 @@ // toolTip.ShowAlways = true; // - // MainForm + // toolStripSeparator4 + // + toolStripSeparator4.Name = "toolStripSeparator4"; + toolStripSeparator4.Size = new Size(285, 6); + // + // toolStripSeparator5 + // + toolStripSeparator5.Name = "toolStripSeparator5"; + toolStripSeparator5.Size = new Size(285, 6); + // + // toolStripSeparator6 + // + toolStripSeparator6.Name = "toolStripSeparator6"; + toolStripSeparator6.Size = new Size(285, 6); + // + // toolStripMenuItem_ExportWebp + // + toolStripMenuItem_ExportWebp.Name = "toolStripMenuItem_ExportWebp"; + toolStripMenuItem_ExportWebp.Size = new Size(288, 34); + toolStripMenuItem_ExportWebp.Text = "WebP..."; + toolStripMenuItem_ExportWebp.Click += toolStripMenuItem_ExportWebp_Click; + // + // toolStripMenuItem_ExportAvif + // + toolStripMenuItem_ExportAvif.Name = "toolStripMenuItem_ExportAvif"; + toolStripMenuItem_ExportAvif.Size = new Size(288, 34); + toolStripMenuItem_ExportAvif.Text = "AVIF..."; + toolStripMenuItem_ExportAvif.Click += toolStripMenuItem_ExportAvif_Click; + // + // SpineViewerForm // AutoScaleDimensions = new SizeF(11F, 24F); AutoScaleMode = AutoScaleMode.Font; @@ -496,7 +530,7 @@ Icon = (Icon)resources.GetObject("$this.Icon"); MainMenuStrip = menuStrip; Margin = new Padding(3, 2, 3, 2); - Name = "MainForm"; + Name = "SpineViewerForm"; StartPosition = FormStartPosition.CenterScreen; Text = "SpineViewer"; FormClosing += MainForm_FormClosing; @@ -570,5 +604,10 @@ private TabControl tabControl_Config; private TabPage tabPage_Previewer; private TabPage tabPage_SpineProperty; + private ToolStripSeparator toolStripSeparator4; + private ToolStripMenuItem toolStripMenuItem_ExportWebp; + private ToolStripMenuItem toolStripMenuItem_ExportAvif; + private ToolStripSeparator toolStripSeparator5; + private ToolStripSeparator toolStripSeparator6; } } diff --git a/SpineViewer/Forms/SpineViewerForm.cs b/SpineViewer/Forms/SpineViewerForm.cs index 5468092..bd298e2 100644 --- a/SpineViewer/Forms/SpineViewerForm.cs +++ b/SpineViewer/Forms/SpineViewerForm.cs @@ -14,6 +14,8 @@ namespace SpineViewer { private readonly Logger logger = LogManager.GetCurrentClassLogger(); + private readonly Dictionary exporterCache = []; + public SpineViewerForm() { InitializeComponent(); @@ -81,21 +83,22 @@ namespace SpineViewer spineListView.BatchAdd(); } - #region toolStripMenuItem_ExportXXX_Click + #region private void toolStripMenuItem_ExportXXX_Click(object sender, EventArgs e) private void toolStripMenuItem_ExportFrame_Click(object sender, EventArgs e) { if (spinePreviewer.IsUpdating && MessagePopup.Quest("画面仍在更新,建议手动暂停画面后导出固定的一帧,是否继续?") != DialogResult.OK) return; - var exporter = new FrameExporter() - { - Resolution = spinePreviewer.Resolution, - View = spinePreviewer.GetView(), - RenderSelectedOnly = spinePreviewer.RenderSelectedOnly - }; + var k = nameof(toolStripMenuItem_ExportFrame); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new FrameExporter(); - var exportDialog = new Dialogs.ExportDialog(new FrameExporterWrapper(exporter)); + var exporter = exporterCache[k]; + exporter.Resolution = spinePreviewer.Resolution; + exporter.View = spinePreviewer.GetView(); + exporter.RenderSelectedOnly = spinePreviewer.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new FrameExporterWrapper((FrameExporter)exporter)); if (exportDialog.ShowDialog() != DialogResult.OK) return; @@ -107,14 +110,15 @@ namespace SpineViewer private void toolStripMenuItem_ExportFrameSequence_Click(object sender, EventArgs e) { - var exporter = new FrameSequenceExporter() - { - Resolution = spinePreviewer.Resolution, - View = spinePreviewer.GetView(), - RenderSelectedOnly = spinePreviewer.RenderSelectedOnly - }; + var k = nameof(toolStripMenuItem_ExportFrameSequence); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new FrameSequenceExporter(); - var exportDialog = new Dialogs.ExportDialog(new FrameSequenceExporterWrapper(exporter)); + var exporter = exporterCache[k]; + exporter.Resolution = spinePreviewer.Resolution; + exporter.View = spinePreviewer.GetView(); + exporter.RenderSelectedOnly = spinePreviewer.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new FrameSequenceExporterWrapper((FrameSequenceExporter)exporter)); if (exportDialog.ShowDialog() != DialogResult.OK) return; @@ -126,14 +130,55 @@ namespace SpineViewer private void toolStripMenuItem_ExportGif_Click(object sender, EventArgs e) { - var exporter = new GifExporter() - { - Resolution = spinePreviewer.Resolution, - View = spinePreviewer.GetView(), - RenderSelectedOnly = spinePreviewer.RenderSelectedOnly - }; + var k = nameof(toolStripMenuItem_ExportGif); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new GifExporter(); - var exportDialog = new Dialogs.ExportDialog(new GifExporterWrapper(exporter)); + var exporter = exporterCache[k]; + exporter.Resolution = spinePreviewer.Resolution; + exporter.View = spinePreviewer.GetView(); + exporter.RenderSelectedOnly = spinePreviewer.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new GifExporterWrapper((GifExporter)exporter)); + if (exportDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += Export_Work; + progressDialog.RunWorkerAsync(exporter); + progressDialog.ShowDialog(); + } + + private void toolStripMenuItem_ExportWebp_Click(object sender, EventArgs e) + { + var k = nameof(toolStripMenuItem_ExportWebp); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new WebpExporter(); + + var exporter = exporterCache[k]; + exporter.Resolution = spinePreviewer.Resolution; + exporter.View = spinePreviewer.GetView(); + exporter.RenderSelectedOnly = spinePreviewer.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new WebpExporterWrapper((WebpExporter)exporter)); + if (exportDialog.ShowDialog() != DialogResult.OK) + return; + + var progressDialog = new Dialogs.ProgressDialog(); + progressDialog.DoWork += Export_Work; + progressDialog.RunWorkerAsync(exporter); + progressDialog.ShowDialog(); + } + + private void toolStripMenuItem_ExportAvif_Click(object sender, EventArgs e) + { + var k = nameof(toolStripMenuItem_ExportAvif); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new AvifExporter(); + + var exporter = exporterCache[k]; + exporter.Resolution = spinePreviewer.Resolution; + exporter.View = spinePreviewer.GetView(); + exporter.RenderSelectedOnly = spinePreviewer.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new AvifExporterWrapper((AvifExporter)exporter)); if (exportDialog.ShowDialog() != DialogResult.OK) return; @@ -145,14 +190,15 @@ namespace SpineViewer private void toolStripMenuItem_ExportMp4_Click(object sender, EventArgs e) { - var exporter = new Mp4Exporter() - { - Resolution = spinePreviewer.Resolution, - View = spinePreviewer.GetView(), - RenderSelectedOnly = spinePreviewer.RenderSelectedOnly - }; + var k = nameof(toolStripMenuItem_ExportMp4); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new Mp4Exporter(); - var exportDialog = new Dialogs.ExportDialog(new Mp4ExporterWrapper(exporter)); + var exporter = exporterCache[k]; + exporter.Resolution = spinePreviewer.Resolution; + exporter.View = spinePreviewer.GetView(); + exporter.RenderSelectedOnly = spinePreviewer.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new Mp4ExporterWrapper((Mp4Exporter)exporter)); if (exportDialog.ShowDialog() != DialogResult.OK) return; @@ -164,14 +210,15 @@ namespace SpineViewer private void toolStripMenuItem_ExportWebm_Click(object sender, EventArgs e) { - var exporter = new WebmExporter() - { - Resolution = spinePreviewer.Resolution, - View = spinePreviewer.GetView(), - RenderSelectedOnly = spinePreviewer.RenderSelectedOnly - }; + var k = nameof(toolStripMenuItem_ExportWebm); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new WebmExporter(); - var exportDialog = new Dialogs.ExportDialog(new WebmExporterWrapper(exporter)); + var exporter = exporterCache[k]; + exporter.Resolution = spinePreviewer.Resolution; + exporter.View = spinePreviewer.GetView(); + exporter.RenderSelectedOnly = spinePreviewer.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new WebmExporterWrapper((WebmExporter)exporter)); if (exportDialog.ShowDialog() != DialogResult.OK) return; @@ -183,14 +230,15 @@ namespace SpineViewer private void toolStripMenuItem_ExportMkv_Click(object sender, EventArgs e) { - var exporter = new MkvExporter() - { - Resolution = spinePreviewer.Resolution, - View = spinePreviewer.GetView(), - RenderSelectedOnly = spinePreviewer.RenderSelectedOnly - }; + var k = nameof(toolStripMenuItem_ExportMkv); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new MkvExporter(); - var exportDialog = new Dialogs.ExportDialog(new MkvExporterWrapper(exporter)); + var exporter = exporterCache[k]; + exporter.Resolution = spinePreviewer.Resolution; + exporter.View = spinePreviewer.GetView(); + exporter.RenderSelectedOnly = spinePreviewer.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new MkvExporterWrapper((MkvExporter)exporter)); if (exportDialog.ShowDialog() != DialogResult.OK) return; @@ -202,14 +250,15 @@ namespace SpineViewer private void toolStripMenuItem_ExportMov_Click(object sender, EventArgs e) { - var exporter = new MovExporter() - { - Resolution = spinePreviewer.Resolution, - View = spinePreviewer.GetView(), - RenderSelectedOnly = spinePreviewer.RenderSelectedOnly - }; + var k = nameof(toolStripMenuItem_ExportMov); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new MovExporter(); - var exportDialog = new Dialogs.ExportDialog(new MovExporterWrapper(exporter)); + var exporter = exporterCache[k]; + exporter.Resolution = spinePreviewer.Resolution; + exporter.View = spinePreviewer.GetView(); + exporter.RenderSelectedOnly = spinePreviewer.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new MovExporterWrapper((MovExporter)exporter)); if (exportDialog.ShowDialog() != DialogResult.OK) return; @@ -221,14 +270,15 @@ namespace SpineViewer private void toolStripMenuItem_ExportCustom_Click(object sender, EventArgs e) { - var exporter = new CustomExporter() - { - Resolution = spinePreviewer.Resolution, - View = spinePreviewer.GetView(), - RenderSelectedOnly = spinePreviewer.RenderSelectedOnly - }; + var k = nameof(toolStripMenuItem_ExportCustom); + if (!exporterCache.ContainsKey(k)) exporterCache[k] = new CustomExporter(); - var exportDialog = new Dialogs.ExportDialog(new CustomExporterWrapper(exporter)); + var exporter = exporterCache[k]; + exporter.Resolution = spinePreviewer.Resolution; + exporter.View = spinePreviewer.GetView(); + exporter.RenderSelectedOnly = spinePreviewer.RenderSelectedOnly; + + var exportDialog = new Dialogs.ExportDialog(new CustomExporterWrapper((CustomExporter)exporter)); if (exportDialog.ShowDialog() != DialogResult.OK) return; @@ -369,41 +419,41 @@ namespace SpineViewer //private IntPtr memDC; //private void _Test() //{ - // screenDC = Win32.GetDC(IntPtr.Zero); - // memDC = Win32.CreateCompatibleDC(screenDC); - // pet.Show(); - // timer.Tick += Timer_Tick; - // timer.Enabled = true; - // timer.Interval = 50; - // timer.Start(); - //} + // screenDC = Win32.GetDC(IntPtr.Zero); + // memDC = Win32.CreateCompatibleDC(screenDC); + // pet.Show(); + // timer.Tick += Timer_Tick; + // timer.Enabled = true; + // timer.Interval = 50; + // timer.Start(); + //} - //private void Timer_Tick(object? sender, EventArgs e) - //{ - // using var tex = new SFML.Graphics.RenderTexture((uint)pet.Width, (uint)pet.Height); - // var v = spinePreviewer.GetView(); - // tex.SetView(v); - // tex.Clear(new SFML.Graphics.Color(0, 0, 0, 0)); - // lock (spineListView.Spines) - // { - // foreach (var sp in spineListView.Spines) - // tex.Draw(sp); - // } - // tex.Display(); - // using var frame = new SFMLImageVideoFrame(tex.Texture.CopyToImage()); - // using var bitmap = frame.CopyToBitmap(); + //private void Timer_Tick(object? sender, EventArgs e) + //{ + // using var tex = new SFML.Graphics.RenderTexture((uint)pet.Width, (uint)pet.Height); + // var v = spinePreviewer.GetView(); + // tex.SetView(v); + // tex.Clear(new SFML.Graphics.Color(0, 0, 0, 0)); + // lock (spineListView.Spines) + // { + // foreach (var sp in spineListView.Spines) + // tex.Draw(sp); + // } + // tex.Display(); + // using var frame = new SFMLImageVideoFrame(tex.Texture.CopyToImage()); + // using var bitmap = frame.CopyToBitmap(); - // var newBitmap = bitmap.GetHbitmap(Color.FromArgb(0)); - // var oldBitmap = Win32.SelectObject(memDC, newBitmap); + // var newBitmap = bitmap.GetHbitmap(Color.FromArgb(0)); + // var oldBitmap = Win32.SelectObject(memDC, newBitmap); - // Win32.SIZE size = new Win32.SIZE { cx = pet.Width, cy = pet.Height }; - // Win32.POINT srcPos = new Win32.POINT { x = 0, y = 0 }; - // Win32.BLENDFUNCTION blend = new Win32.BLENDFUNCTION { BlendOp = 0, BlendFlags = 0, SourceConstantAlpha = 255, AlphaFormat = Win32.AC_SRC_ALPHA }; + // Win32.SIZE size = new Win32.SIZE { cx = pet.Width, cy = pet.Height }; + // Win32.POINT srcPos = new Win32.POINT { x = 0, y = 0 }; + // Win32.BLENDFUNCTION blend = new Win32.BLENDFUNCTION { BlendOp = 0, BlendFlags = 0, SourceConstantAlpha = 255, AlphaFormat = Win32.AC_SRC_ALPHA }; - // Win32.UpdateLayeredWindow(pet.Handle, screenDC, IntPtr.Zero, ref size, memDC, ref srcPos, 0, ref blend, Win32.ULW_ALPHA); + // Win32.UpdateLayeredWindow(pet.Handle, screenDC, IntPtr.Zero, ref size, memDC, ref srcPos, 0, ref blend, Win32.ULW_ALPHA); - // Win32.SelectObject(memDC, oldBitmap); - // Win32.DeleteObject(newBitmap); + // Win32.SelectObject(memDC, oldBitmap); + // Win32.DeleteObject(newBitmap); //} //private void spinePreviewer_KeyDown(object sender, KeyEventArgs e)