阶段性批量提交
This commit is contained in:
45
SHH.CameraDashboard/Invokes/BitmapHelper.cs
Normal file
45
SHH.CameraDashboard/Invokes/BitmapHelper.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using System.IO;
|
||||
using System.Windows.Media.Imaging;
|
||||
|
||||
namespace SHH.CameraDashboard;
|
||||
|
||||
/// <summary>
|
||||
/// [UI层] 图像数据转换助手
|
||||
/// 职责:将内存中的二进制 JPEG 数据高效转换为 WPF 可用的 BitmapImage
|
||||
/// 优化:使用 OnLoad 缓存策略和 Freeze 冻结对象,支持跨线程访问,防止内存泄漏
|
||||
/// </summary>
|
||||
public static class BitmapHelper
|
||||
{
|
||||
public static BitmapImage? ToBitmapImage(byte[] blob)
|
||||
{
|
||||
if (blob == null || blob.Length == 0) return null;
|
||||
|
||||
try
|
||||
{
|
||||
using (var stream = new MemoryStream(blob))
|
||||
{
|
||||
var bitmap = new BitmapImage();
|
||||
bitmap.BeginInit();
|
||||
|
||||
// 关键优化 1: 立即加载流到内存,允许 stream 在方法结束后被释放
|
||||
bitmap.CacheOption = BitmapCacheOption.OnLoad;
|
||||
bitmap.StreamSource = stream;
|
||||
|
||||
// 关键优化 2: 忽略内嵌的色彩配置和缩略图,提升解码速度
|
||||
bitmap.CreateOptions = BitmapCreateOptions.IgnoreColorProfile | BitmapCreateOptions.IgnoreImageCache;
|
||||
|
||||
bitmap.EndInit();
|
||||
|
||||
// 关键优化 3: 冻结对象,使其变得线程安全(可以跨线程传递给 UI)
|
||||
bitmap.Freeze();
|
||||
|
||||
return bitmap;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// 解码失败(可能是坏帧),返回 null 忽略该帧
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user