ImageHelper.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. using Cognex.VisionPro;
  2. using OpenCvSharp;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Drawing;
  6. using System.Drawing.Imaging;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Media.Imaging;
  12. namespace TeamAAS_VP.Core
  13. {
  14. public class ImageHelper
  15. {
  16. /// <summary>
  17. /// 压缩并保存图片
  18. /// </summary>
  19. /// <param name="bitmap"></param>
  20. /// <param name="path">目标图像存储路径JPEG</param>
  21. /// <param name="quality">压缩等级,0到100,0 最差质量,100 最佳</param>
  22. public static void CompressImage(Bitmap bitmap, string path, long quality = 20)
  23. {
  24. ImageCodecInfo codecInfo = GetEncoderInfo("image/jpeg");
  25. System.Drawing.Imaging.Encoder encoder = System.Drawing.Imaging.Encoder.Quality;
  26. EncoderParameters parameters = new EncoderParameters(1);
  27. EncoderParameter parameter = new EncoderParameter(encoder, quality);
  28. parameters.Param[0] = parameter;
  29. bitmap.Save(path, codecInfo, parameters);
  30. bitmap.Dispose();
  31. parameter.Dispose();
  32. parameters.Dispose();
  33. }
  34. private static ImageCodecInfo GetEncoderInfo(String mimeType)
  35. {
  36. int j;
  37. ImageCodecInfo[] encoders;
  38. encoders = ImageCodecInfo.GetImageEncoders();
  39. for (j = 0; j < encoders.Length; ++j)
  40. {
  41. if (encoders[j].MimeType == mimeType)
  42. return encoders[j];
  43. }
  44. return null;
  45. }
  46. public static Bitmap ICogImageConvertBitmap(ICogImage image)
  47. {
  48. return image.ToBitmap();
  49. }
  50. public static Mat ICogImageConvertMat(ICogImage image)
  51. {
  52. var im = image.ToBitmap();
  53. Mat im1 = OpenCvSharp.Extensions.BitmapConverter.ToMat(im);
  54. im.Dispose();
  55. return im1;
  56. }
  57. public static Bitmap MatConvertBitmap(Mat image)
  58. {
  59. return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image);
  60. }
  61. public static ICogImage MatConvertICogImage(Mat image, bool color = false)
  62. {
  63. var im = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image);
  64. ICogImage cogImage = new CogImage8Grey(im);
  65. if (color)
  66. {
  67. cogImage = new CogImage24PlanarColor(im);
  68. }
  69. im.Dispose();
  70. return cogImage;
  71. }
  72. public static BitmapImage ConvertToBitmapImage(System.Drawing.Bitmap bitmap)
  73. {
  74. using (MemoryStream memoryStream = new MemoryStream())
  75. {
  76. // 将 System.Drawing.Bitmap 保存到内存流中
  77. bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
  78. // 重置内存流的位置,以便从头开始读取
  79. memoryStream.Seek(0, SeekOrigin.Begin);
  80. // 创建 BitmapImage 对象并加载内存流中的图像数据
  81. BitmapImage bitmapImage = new BitmapImage();
  82. bitmapImage.BeginInit();
  83. bitmapImage.StreamSource = memoryStream;
  84. bitmapImage.EndInit();
  85. return bitmapImage;
  86. }
  87. }
  88. public static BitmapImage ConvertToBitmapImage(ICogImage image)
  89. {
  90. var bitmap = image.ToBitmap();
  91. using (MemoryStream memoryStream = new MemoryStream())
  92. {
  93. // 将 System.Drawing.Bitmap 保存到内存流中
  94. bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
  95. // 重置内存流的位置,以便从头开始读取
  96. memoryStream.Seek(0, SeekOrigin.Begin);
  97. // 创建 BitmapImage 对象并加载内存流中的图像数据
  98. BitmapImage bitmapImage = new BitmapImage();
  99. bitmapImage.BeginInit();
  100. bitmapImage.StreamSource = memoryStream;
  101. bitmapImage.EndInit();
  102. bitmap.Dispose();
  103. return bitmapImage;
  104. }
  105. }
  106. public static BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap)
  107. {
  108. BitmapImage bitmapImage = new BitmapImage();
  109. using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
  110. {
  111. bitmap.Save(ms, bitmap.RawFormat);
  112. bitmapImage.BeginInit();
  113. bitmapImage.StreamSource = ms;
  114. bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
  115. bitmapImage.EndInit();
  116. bitmapImage.Freeze();
  117. }
  118. return bitmapImage;
  119. }
  120. }
  121. }