99 lines
3.0 KiB
C#
99 lines
3.0 KiB
C#
using System;
|
||
using System.IO;
|
||
using System.Windows;
|
||
using System.Windows.Controls;
|
||
using System.Windows.Media;
|
||
using System.Windows.Media.Imaging;
|
||
|
||
namespace PLCDataMonitor
|
||
{
|
||
public static class CurveCaptureHelper
|
||
{
|
||
/// <summary>
|
||
/// 捕获CurvePage的曲线Canvas并转为BitmapImage
|
||
/// </summary>
|
||
public static BitmapImage CaptureCurve(Canvas curveCanvas)
|
||
{
|
||
try
|
||
{
|
||
// 创建与Canvas大小一致的渲染目标
|
||
RenderTargetBitmap renderBitmap = new RenderTargetBitmap(
|
||
(int)curveCanvas.ActualWidth,
|
||
(int)curveCanvas.ActualHeight,
|
||
96, 96,
|
||
PixelFormats.Pbgra32);
|
||
|
||
// 渲染Canvas到Bitmap
|
||
renderBitmap.Render(curveCanvas);
|
||
|
||
// 转为PNG格式图片
|
||
PngBitmapEncoder encoder = new PngBitmapEncoder();
|
||
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
|
||
|
||
// 保存到内存流
|
||
MemoryStream ms = new MemoryStream();
|
||
encoder.Save(ms);
|
||
ms.Position = 0;
|
||
|
||
// 转为BitmapImage返回(供Excel插入)
|
||
BitmapImage bitmap = new BitmapImage();
|
||
bitmap.BeginInit();
|
||
bitmap.StreamSource = ms;
|
||
bitmap.CacheOption = BitmapCacheOption.OnLoad;
|
||
bitmap.EndInit();
|
||
bitmap.Freeze(); // 冻结图片,支持跨线程访问
|
||
|
||
return bitmap;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
MessageBox.Show($"曲线截图失败:{ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
||
return null;
|
||
}
|
||
}
|
||
}
|
||
|
||
public class ReportData
|
||
{
|
||
// 记录时间
|
||
public string Time { get; set; }
|
||
// 工位1压力(MPa)
|
||
public string Pressure1 { get; set; }
|
||
// 工位2压力(MPa)
|
||
public string Pressure2 { get; set; }
|
||
// 工位1最大摩擦力(N)
|
||
public string Friction1 { get; set; }
|
||
// 工位2最大摩擦力(N)
|
||
public string Friction2 { get; set; }
|
||
|
||
|
||
public float? t1 { get; set; }
|
||
|
||
public float? t2 { get; set; }
|
||
|
||
public float? D { get; set; }
|
||
|
||
|
||
|
||
// 【新增】用于存储净运行时间(秒),用于导出和绘图
|
||
public double ElapsedSeconds { get; set; }
|
||
|
||
public string Id { get; set; }
|
||
|
||
// 构造函数(用于创建数据实例)
|
||
public ReportData(string time, string pressure1, string pressure2, string friction1, string friction2, float? t1, float? t2, float? d)
|
||
{
|
||
Time = time;
|
||
Pressure1 = pressure1;
|
||
Pressure2 = pressure2;
|
||
Friction1 = friction1;
|
||
Friction2 = friction2;
|
||
this.t1 = t1;
|
||
this.t2 = t2;
|
||
D = d;
|
||
}
|
||
|
||
// 无参构造函数(供XAML示例数据使用)
|
||
public ReportData() { }
|
||
}
|
||
} |