]> granicus.if.org Git - handbrake/commitdiff
WinGui: Remove references to System.Drawing from Alpha.ApplicationServices. The WPF...
authorsr55 <sr55.hb@outlook.com>
Sun, 6 May 2018 18:41:30 +0000 (19:41 +0100)
committersr55 <sr55.hb@outlook.com>
Sun, 6 May 2018 18:41:30 +0000 (19:41 +0100)
win/CS/HandBrake.ApplicationServices/HandBrake.ApplicationServices.csproj
win/CS/HandBrake.ApplicationServices/Interop/HandBrakeInstance.cs
win/CS/HandBrake.ApplicationServices/Interop/Interfaces/IHandBrakeInstance.cs
win/CS/HandBrake.ApplicationServices/Interop/Model/Preview/RawPreviewData.cs [new file with mode: 0644]
win/CS/HandBrakeWPF/Services/Scan/LibScan.cs
win/CS/HandBrakeWPF/Utilities/BitmapUtilities.cs

index 43f64e0c296c4ec76664271a696b954023342c4a..a3f7a4b414a4ad7a9e2ffa1bf0c240b7a003d680 100644 (file)
@@ -43,7 +43,6 @@
     <Reference Include="System.Core">\r
       <RequiredTargetFramework>3.5</RequiredTargetFramework>\r
     </Reference>\r
-    <Reference Include="System.Drawing" />\r
     <Reference Include="System.Xml.Linq">\r
       <RequiredTargetFramework>3.5</RequiredTargetFramework>\r
     </Reference>\r
     <Compile Include="Interop\Model\Encoding\DeinterlaceFilter.cs" />\r
     <Compile Include="Interop\Model\Encoding\HBPresetTune.cs" />\r
     <Compile Include="Interop\Model\Encoding\Sharpen.cs" />\r
+    <Compile Include="Interop\Model\Preview\RawPreviewData.cs" />\r
     <Compile Include="Properties\AssemblyInfo.cs" />\r
     <Compile Include="Interop\Json\Scan\SourceAudioTrack.cs" />\r
     <Compile Include="Interop\Json\Scan\SourceChapter.cs" />\r
index e398edda26eef6f3a396eeea3a21ae2532e21ddd..d8f432fc40a2d79fadf04cf9580ed16801fb8524 100644 (file)
@@ -12,9 +12,6 @@ namespace HandBrake.ApplicationServices.Interop
     using System;\r
     using System.Collections.Generic;\r
     using System.Diagnostics;\r
-    using System.Drawing;\r
-    using System.Drawing.Imaging;\r
-    using System.IO;\r
     using System.Linq;\r
     using System.Runtime.ExceptionServices;\r
     using System.Runtime.InteropServices;\r
@@ -27,9 +24,7 @@ namespace HandBrake.ApplicationServices.Interop
     using HandBrake.ApplicationServices.Interop.Interfaces;\r
     using HandBrake.ApplicationServices.Interop.Json.Encode;\r
     using HandBrake.ApplicationServices.Interop.Json.Scan;\r
-    using HandBrake.ApplicationServices.Interop.Json.Shared;\r
     using HandBrake.ApplicationServices.Interop.Json.State;\r
-    using HandBrake.ApplicationServices.Interop.Model;\r
     using HandBrake.ApplicationServices.Interop.Model.Encoding;\r
     using HandBrake.ApplicationServices.Interop.Model.Preview;\r
     using HandBrake.ApplicationServices.Services.Logging;\r
@@ -38,8 +33,6 @@ namespace HandBrake.ApplicationServices.Interop
 \r
     using Newtonsoft.Json;\r
 \r
-    using Size = HandBrake.ApplicationServices.Interop.Model.Size;\r
-\r
     /// <summary>\r
     /// A wrapper for a HandBrake instance.\r
     /// </summary>\r
@@ -287,7 +280,7 @@ namespace HandBrake.ApplicationServices.Interop
         /// An image with the requested preview.\r
         /// </returns>\r
         [HandleProcessCorruptedStateExceptions]\r
-        public Bitmap GetPreview(PreviewSettings settings, int previewNumber, bool deinterlace)\r
+        public RawPreviewData GetPreview(PreviewSettings settings, int previewNumber, bool deinterlace)\r
         {\r
             SourceTitle title = this.Titles.TitleList.FirstOrDefault(t => t.Index == settings.TitleNumber);\r
 \r
@@ -323,25 +316,7 @@ namespace HandBrake.ApplicationServices.Interop
             byte[] managedBuffer = new byte[imageBufferSize];\r
             Marshal.Copy(image.plane[0].data, managedBuffer, 0, imageBufferSize);\r
 \r
-            var bitmap = new Bitmap(image.width, image.height);\r
-\r
-            BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, image.width, image.height), ImageLockMode.WriteOnly, PixelFormat.Format32bppRgb);\r
-\r
-            IntPtr ptr = bitmapData.Scan0; // Pointer to the first pixel.\r
-            for (int i = 0; i < image.height; i++)\r
-            {\r
-                try\r
-                {\r
-                    Marshal.Copy(managedBuffer, i * stride_width, ptr, stride_width);\r
-                    ptr = IntPtr.Add(ptr, image.width * 4);\r
-                }\r
-                catch (Exception exc)\r
-                {\r
-                    Debug.WriteLine(exc); // In theory, this will allow a partial image display if this happens. TODO add better logging of this.\r
-                }\r
-            }\r
-\r
-            bitmap.UnlockBits(bitmapData);\r
+            RawPreviewData preview = new RawPreviewData(managedBuffer, stride_width, stride_height, image.width, image.height);\r
 \r
             // Close the image so we don't leak memory.\r
             IntPtr nativeJobPtrPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(IntPtr)));\r
@@ -349,7 +324,7 @@ namespace HandBrake.ApplicationServices.Interop
             HBFunctions.hb_image_close(nativeJobPtrPtr);\r
             Marshal.FreeHGlobal(nativeJobPtrPtr);\r
 \r
-            return bitmap;\r
+            return preview;\r
         }\r
 \r
         /// <summary>\r
index 5080c20c2172e93357514a1fbb3cd113d41144b6..3f61499b94079452dd9b7824b8ab67235c530a53 100644 (file)
@@ -10,7 +10,6 @@
 namespace HandBrake.ApplicationServices.Interop.Interfaces\r
 {\r
     using System;\r
-    using System.Drawing;\r
 \r
     using HandBrake.ApplicationServices.Interop.EventArgs;\r
     using HandBrake.ApplicationServices.Interop.Json.Encode;\r
@@ -103,7 +102,7 @@ namespace HandBrake.ApplicationServices.Interop.Interfaces
         /// <returns>\r
         /// An image with the requested preview.\r
         /// </returns>\r
-        Bitmap GetPreview(PreviewSettings job, int previewNumber, bool deinterlace);\r
+        RawPreviewData GetPreview(PreviewSettings job, int previewNumber, bool deinterlace);\r
 \r
         /// <summary>\r
         /// Pauses the current encode.\r
diff --git a/win/CS/HandBrake.ApplicationServices/Interop/Model/Preview/RawPreviewData.cs b/win/CS/HandBrake.ApplicationServices/Interop/Model/Preview/RawPreviewData.cs
new file mode 100644 (file)
index 0000000..2da2dc5
--- /dev/null
@@ -0,0 +1,26 @@
+// --------------------------------------------------------------------------------------------------------------------
+// <copyright file="RawPreviewData.cs" company="HandBrake Project (http://handbrake.fr)">
+// This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License.
+// </copyright>
+// --------------------------------------------------------------------------------------------------------------------
+
+namespace HandBrake.ApplicationServices.Interop.Model.Preview
+{
+    public class RawPreviewData
+    {
+        public RawPreviewData(byte[] rawBitmapData, int strideWidth, int strideHeight, int width, int height)
+        {
+            this.RawBitmapData = rawBitmapData;
+            this.StrideWidth = strideWidth;
+            this.StrideHeight = strideHeight;
+            this.Width = width;
+            this.Height = height;
+        }
+
+        public byte[] RawBitmapData { get; }
+        public int StrideWidth { get; }
+        public int StrideHeight { get; }
+        public int Width { get; }
+        public int Height { get; }
+    }
+}
index 7558bc163cb09e358969ab77870885b135b0578b..bb27039033d391038fb4ab9d903dcd2bce0e908d 100644 (file)
@@ -207,7 +207,8 @@ namespace HandBrakeWPF.Services.Scan
                                                    PixelAspectY = job.PixelAspectY
                                                };
 
-                bitmapImage = BitmapUtilities.ConvertToBitmapImage(this.instance.GetPreview(settings, preview, job.DeinterlaceFilter != DeinterlaceFilter.Off));
+                var bitmapData = this.instance.GetPreview(settings, preview, job.DeinterlaceFilter != DeinterlaceFilter.Off);
+                bitmapImage = BitmapUtilities.ConvertToBitmapImage(BitmapUtilities.ConvertByteArrayToBitmap(bitmapData));
             }
             catch (AccessViolationException e)
             {
index bc0f300614fa7a92b74835a5be5e70a32559e270..0f5b64d5382294abc3bafe0e3be1d8597485a1c2 100644 (file)
@@ -9,11 +9,16 @@
 
 namespace HandBrakeWPF.Utilities
 {
+    using System;
+    using System.Diagnostics;
     using System.Drawing;
     using System.Drawing.Imaging;
     using System.IO;
+    using System.Runtime.InteropServices;
     using System.Windows.Media.Imaging;
 
+    using HandBrake.ApplicationServices.Interop.Model.Preview;
+
     /// <summary>
     /// The bitmap utilities.
     /// </summary>
@@ -52,5 +57,30 @@ namespace HandBrakeWPF.Utilities
                 return wpfBitmap;
             }
         }
+
+        public static Bitmap ConvertByteArrayToBitmap(RawPreviewData previewData)
+        {
+            var bitmap = new Bitmap(previewData.Width, previewData.Height);
+
+            BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, previewData.Width, previewData.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppRgb);
+
+            IntPtr ptr = bitmapData.Scan0; // Pointer to the first pixel.
+            for (int i = 0; i < previewData.Height; i++)
+            {
+                try
+                {
+                    Marshal.Copy(previewData.RawBitmapData, i * previewData.StrideWidth, ptr, previewData.StrideWidth);
+                    ptr = IntPtr.Add(ptr, previewData.Width * 4);
+                }
+                catch (Exception exc)
+                {
+                    Debug.WriteLine(exc); // In theory, this will allow a partial image display if this happens. TODO add better logging of this.
+                }
+            }
+
+            bitmap.UnlockBits(bitmapData);
+
+            return bitmap;
+        }
     }
 }