保存图片更新试试

This commit is contained in:
2025-04-02 14:41:26 +08:00
parent 409089e2ca
commit babc40d36a
6 changed files with 472 additions and 43 deletions

View File

@ -76,6 +76,12 @@ namespace DH.Devices.Vision
//未能获得检测配置
return detectResult;
}
detectResult.ImageSaveDirectory=detectConfig.ImageSaveDirectory;
detectResult.SaveNGDetect=detectConfig.SaveNGDetect;
detectResult.SaveNGOriginal=detectConfig.SaveNGOriginal;
detectResult.SaveOKDetect=detectConfig.SaveOKDetect;
detectResult.SaveOKOriginal=detectConfig.SaveOKOriginal;
detectResult.DetectionOriginImage = originImgSet.Clone().ToBitmap();
Stopwatch sw = new Stopwatch();
#region 1.
sw.Start();
@ -952,15 +958,15 @@ namespace DH.Devices.Vision
});
}
//if (detectResult.realSpecs != null && detectResult.realSpecs?.Count > 0)
//{
// detectResult.realSpecs.ForEach(d =>
// {
// displayTxt +=
// $"{d.Code} :{d.ActualValue} \r\n";
// });
//}
Bitmap resultMask=result.ToBitmap();
if (detectResult.realSpecs != null && detectResult.realSpecs?.Count > 0)
{
detectResult.realSpecs.ForEach(d =>
{
displayTxt +=
$"{d.Code} :{d.ActualValue} \r\n";
});
}
Bitmap resultMask =result.ToBitmap();
//if (detectResult.VisionImageSet.DetectionResultImage == null && detectResult.VisionImageSet.SizeResultImage == null)
//{
// return;
@ -995,7 +1001,7 @@ namespace DH.Devices.Vision
DetectionDone(DetectionId, resultMask, detectionResultShapes);
//SaveDetectResultImageAsync(detectResult);
SaveDetectResultImageAsync(detectResult);
// SaveDetectResultCSVAsync(detectResult);
}
catch (Exception ex)
@ -1010,6 +1016,178 @@ namespace DH.Devices.Vision
}
});
}
/// <summary>
///图片异步保存
/// </summary>
public void SaveDetectResultImageAsync(DetectStationResult detectResult)
{
string format = detectResult.ImageFormat.ToString().ToLower();
//根目录
string rootPath = Path.Combine(detectResult.ImageSaveDirectory,
DateTime.Now.ToString("yyyyMMdd"), BatchNO, detectResult.DetectName);
if (detectResult.ResultState != ResultState.OK)
{
// NG原图
if (detectResult.SaveNGOriginal && detectResult.DetectionOriginImage != null)
{
string prefix = Path.Combine(rootPath, "NGRawImages", detectResult.ResultLabel);
string fullname = Path.Combine(prefix, $"{detectResult.Pid}_NGRawImage_{detectResult.DetectName}_{detectResult.Id}.{format}");
SaveImageAsync(fullname, detectResult.DetectionOriginImage, detectResult.ImageFormat);
}
//NG结果图
if (detectResult.SaveOKDetect && detectResult.DetectionOriginImage != null)
{
// 没有预处理,则保存原始图+检测结果图
// if (detectResult.VisionImageSet.PreTreatedBitmap == null)
{
//string displayTxt = detectResult.ResultState.ToString() + "\r\n";
string displayTxt = "";
detectResult.DetectDetails.ForEach(d =>
{
displayTxt += $"{d.LabelName} score:{d.Score.ToString("f2")} area:{d.Area.ToString("f2")}\r\n";
});
if (detectResult.realSpecs != null && detectResult.realSpecs?.Count > 0)
{
detectResult.realSpecs.ForEach(d =>
{
displayTxt +=
$"{d.Code} score:{d.ActualValue} \r\n";
});
}
Bitmap resultMask = detectResult.DetectionOriginImage.CopyBitmap();
Bitmap preTreatedBitmap = detectResult.DetectionOriginImage.CopyBitmap();
List<IShapeElement> detectionResultShapes = new List<IShapeElement>(detectResult.DetectionResultShapes);
DetectResultDisplay resultDisplay = new DetectResultDisplay(detectResult, resultMask, displayTxt);
detectionResultShapes.Add(resultDisplay);
Bitmap resultMap = GetResultImage(resultMask, detectionResultShapes);
resultDisplay.Dispose();
detectionResultShapes.Clear();
Bitmap detectionFitImage = StaticHelper.HConnectBitmap(preTreatedBitmap, resultMap);
string prefix = Path.Combine(rootPath, "NGFitImages", detectResult.ResultLabel);
string fullname = Path.Combine(prefix, $"{detectResult.Pid}_NGFitImage_{detectResult.DetectName}_{detectResult.Id}.{format}");
SaveImageAsync(fullname, detectionFitImage, detectResult.ImageFormat);
resultMask?.Dispose();
preTreatedBitmap?.Dispose();
resultMap?.Dispose();
detectionFitImage?.Dispose();
}
}
}
else
{ // OK原图
if (detectResult.SaveOKOriginal && detectResult.DetectionOriginImage != null)
{
string prefix = Path.Combine(rootPath, "OKRawImages", detectResult.ResultLabel);
string fullname = Path.Combine(prefix, $"{detectResult.Pid}_OKRawImage_{detectResult.DetectName}_{detectResult.Id}.{format}");
SaveImageAsync(fullname, detectResult.DetectionOriginImage, detectResult.ImageFormat);
}
//ok结果图
if (detectResult.SaveOKDetect && detectResult.DetectionOriginImage != null)
{
// 没有预处理,则保存原始图+检测结果图
// if (detectResult.VisionImageSet.PreTreatedBitmap == null)
{
//string displayTxt = detectResult.ResultState.ToString() + "\r\n";
string displayTxt = "";
detectResult.DetectDetails.ForEach(d =>
{
displayTxt += $"{d.LabelName} score:{d.Score.ToString("f2")} area:{d.Area.ToString("f2")}\r\n";
});
if (detectResult.realSpecs != null && detectResult.realSpecs?.Count > 0)
{
detectResult.realSpecs.ForEach(d =>
{
displayTxt +=
$"{d.Code} score:{d.ActualValue} \r\n";
});
}
Bitmap resultMask = detectResult.DetectionOriginImage.CopyBitmap();
Bitmap preTreatedBitmap = detectResult.DetectionOriginImage.CopyBitmap();
List<IShapeElement> detectionResultShapes = new List<IShapeElement>(detectResult.DetectionResultShapes);
DetectResultDisplay resultDisplay = new DetectResultDisplay(detectResult, resultMask, displayTxt);
detectionResultShapes.Add(resultDisplay);
Bitmap resultMap = GetResultImage(resultMask, detectionResultShapes);
resultDisplay.Dispose();
detectionResultShapes.Clear();
Bitmap detectionFitImage = StaticHelper.HConnectBitmap(preTreatedBitmap, resultMap);
string prefix = Path.Combine(rootPath, "OKFitImages", detectResult.ResultLabel);
string fullname = Path.Combine(prefix, $"{detectResult.Pid}_" +
$"OKFitImage_{detectResult.DetectName}_{detectResult.Id}.{format}");
SaveImageAsync(fullname, detectionFitImage, detectResult.ImageFormat);
resultMask?.Dispose();
preTreatedBitmap?.Dispose();
resultMap?.Dispose();
detectionFitImage?.Dispose();
}
}
}
}
public virtual Bitmap GetResultImage(Bitmap baseImage, List<IShapeElement> eleList)
{
try
{
// 重新生成画布 避免 无法从带有索引像素格式的图像创建graphics对象
Bitmap image = new Bitmap(baseImage.Width, baseImage.Height);
using (Graphics g = Graphics.FromImage(image))
{
g.DrawImage(baseImage, 0, 0);
eleList.ForEach(e =>
{
e.State = ElementState.Normal;
e.Draw(g);
});
}
return image;
}
catch (Exception ex)
{
LogAsync(DateTime.Now, LogLevel.Exception, $"获取叠加结果图片异常:{ex.GetExceptionMessage()}");
return null;
}
}
}
}