diff --git a/ShareX.HelpersLib/Helpers/ImageHelpers.cs b/ShareX.HelpersLib/Helpers/ImageHelpers.cs
index 39d504c4e..81d3b4ec2 100644
--- a/ShareX.HelpersLib/Helpers/ImageHelpers.cs
+++ b/ShareX.HelpersLib/Helpers/ImageHelpers.cs
@@ -34,7 +34,7 @@ You should have received a copy of the GNU General Public License
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
-using Encoder = System.Drawing.Imaging.Encoder;
+using System.Windows.Media.Imaging;
namespace ShareX.HelpersLib
{
@@ -76,6 +76,42 @@ public static Bitmap ResizeImage(Bitmap bmp, Size size, InterpolationMode interp
return ResizeImage(bmp, size.Width, size.Height, interpolationMode);
}
+ public static Bitmap ScaleImageFast(Bitmap bmp, double scale)
+ {
+ return ScaleImageFast(bmp, scale, scale);
+ }
+
+ public static Bitmap ScaleImageFast(Bitmap bmp, double scaleX, double scaleY)
+ {
+ using (MemoryStream memoryStream = new MemoryStream())
+ {
+ bmp.Save(memoryStream, ImageFormat.Bmp);
+
+ BitmapImage bitmapImage = new BitmapImage();
+ bitmapImage.BeginInit();
+ bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
+ bitmapImage.StreamSource = memoryStream;
+ bitmapImage.EndInit();
+
+ TransformedBitmap transformedBitmap = new TransformedBitmap();
+ transformedBitmap.BeginInit();
+ transformedBitmap.Source = bitmapImage;
+ transformedBitmap.Transform = new System.Windows.Media.ScaleTransform(scaleX, scaleY);
+ transformedBitmap.EndInit();
+
+ return GetBitmap(transformedBitmap, bmp.PixelFormat);
+ }
+ }
+
+ private static Bitmap GetBitmap(BitmapSource bitmapSource, PixelFormat pixelFormat = PixelFormat.Format32bppArgb)
+ {
+ Bitmap bmp = new Bitmap(bitmapSource.PixelWidth, bitmapSource.PixelHeight, pixelFormat);
+ BitmapData data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, pixelFormat);
+ bitmapSource.CopyPixels(System.Windows.Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride);
+ bmp.UnlockBits(data);
+ return bmp;
+ }
+
public static Bitmap ResizeImage(Bitmap bmp, Size size, bool allowEnlarge, bool centerImage = true)
{
return ResizeImage(bmp, size.Width, size.Height, allowEnlarge, centerImage);
@@ -2917,7 +2953,7 @@ public static void SaveJPEG(Image img, Stream stream, int quality)
using (EncoderParameters encoderParameters = new EncoderParameters(1))
{
- encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, quality);
+ encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
img.Save(stream, ImageFormat.Jpeg.GetCodecInfo(), encoderParameters);
}
}
diff --git a/ShareX.HelpersLib/ShareX.HelpersLib.csproj b/ShareX.HelpersLib/ShareX.HelpersLib.csproj
index a95a627e2..0a180933e 100644
--- a/ShareX.HelpersLib/ShareX.HelpersLib.csproj
+++ b/ShareX.HelpersLib/ShareX.HelpersLib.csproj
@@ -86,6 +86,7 @@
+
@@ -99,6 +100,7 @@
+
diff --git a/ShareX/Tools/OCR/OCRHelper.cs b/ShareX/Tools/OCR/OCRHelper.cs
index 466bef95a..b112efa72 100644
--- a/ShareX/Tools/OCR/OCRHelper.cs
+++ b/ShareX/Tools/OCR/OCRHelper.cs
@@ -64,8 +64,7 @@ public static void ThrowIfNotSupported()
{
if (!IsSupported)
{
- throw new Exception(string.Format(Resources.OpticalCharacterRecognitionFeatureIsOnlyAvailableWithWindowsVersion0OrNewer,
- SupportedVersion));
+ throw new Exception(string.Format(Resources.OpticalCharacterRecognitionFeatureIsOnlyAvailableWithWindowsVersion0OrNewer, SupportedVersion));
}
}
@@ -77,8 +76,7 @@ public static async Task OCR(Bitmap bmp, string languageTag = "en", floa
return await Task.Run(async () =>
{
- using (Bitmap bmpClone = (Bitmap)bmp.Clone())
- using (Bitmap bmpScaled = ImageHelpers.ResizeImage(bmpClone, (int)(bmpClone.Width * scaleFactor), (int)(bmpClone.Height * scaleFactor)))
+ using (Bitmap bmpScaled = ImageHelpers.ScaleImageFast(bmp, scaleFactor))
{
return await OCRInternal(bmpScaled, languageTag, singleLine);
}