banboshi_V1/halftoneproject-master/Code/FrmShowDefectImage.cs

176 lines
6.1 KiB
C#
Raw Normal View History

2023-10-31 13:19:29 +08:00
using Models;
using Newtonsoft.Json;
using ProductionControl.Utils;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ProductionControl
{
public partial class FrmShowDefectImage : Form
{
private Color[] colorList = { Color.Red, Color.Green, Color.DarkViolet , Color.Magenta, Color.Orange, Color.Brown,
Color.Olive, Color.PaleGreen, Color.CadetBlue,Color.Aqua,Color.YellowGreen,Color.Blue,Color.SpringGreen,Color.Fuchsia,Color.White };
private Order mOrder;
private string imgPath;
private int defectType;
/// <summary>
/// 0-Defect 1-Size
/// </summary>
/// <param name="_imgPath"></param>
/// <param name="order"></param>
/// <param name="_defectType">0-Defect 1-Size</param>
public FrmShowDefectImage(string _imgPath,Order order,int _defectType = 0)
{
InitializeComponent();
mOrder = order;
imgPath = _imgPath;
defectType = _defectType;
if(defectType == 0)
{
this.Text = "缺陷分布图";
}
else
{
this.Text = "比对失败区域分布";
}
}
private void initDefectMenus()
{
if (mOrder == null || mOrder.DefectInfoList==null)
throw new Exception("记录项为空!");
tsbtnDefectList.DropDownItems.Clear();
//全缺陷项
var lstDefect = Utils.EnumUtil.GetArrayList<DefectCodeEnum>();
foreach (DictionaryEntry item in lstDefect)
{
string code = item.Value.ToString();//zx item.Key=0/1/2/3
int key = int.Parse(item.Key.ToString());
string name = ((DefectNameEnum)key).ToString();
int num = mOrder.DefectInfoList.Where(x => x.Code == code && x.Type == defectType).Count();//缺陷项个数
ToolStripMenuItem menuItem = new ToolStripMenuItem() { Name = $"btnSub_{code}", Tag = code, Text = $"{name}({num})", ForeColor = colorList[key], Checked = true };
tsbtnDefectList.DropDownItems.Add(menuItem);
menuItem.Click += (object sender, EventArgs e) =>
{
menuItem.Checked = !menuItem.Checked;
//if(menuItem.num>0)
reDraw();
};
}
}
private void FrmShowSizeTag_Load(object sender, EventArgs e)
{
try
{
initDefectMenus();
reDraw();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void tsbtnRefesh_Click(object sender, EventArgs e)
{
try
{
initDefectMenus();
reDraw();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void tsbtnClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void reDraw()
{
Bitmap bmp;
Graphics g;
using (System.Drawing.Image img = System.Drawing.Image.FromFile(imgPath))
{
if (IsIndexedPixelFormat(img.PixelFormat))
{
bmp = new Bitmap(img.Width, img.Height, PixelFormat.Format32bppArgb);
g = Graphics.FromImage(bmp);
g.DrawImage(img, 0, 0);
}
else
{
bmp = new Bitmap(imgPath);
g = Graphics.FromImage(bmp);
}
}
var list = mOrder.DefectInfoList;
string code;
int x, y, w, h;
foreach(ToolStripMenuItem item in tsbtnDefectList.DropDownItems)
{
if (!item.Checked) continue;
code=item.Tag.ToString();
var lstDefectCode=list.Where(m=>m.Code== code && m.Type == defectType).ToList();
foreach (var info in lstDefectCode)
{
x = (int)info.X - 10;
y = (int)info.Y - 10;
w = h = 20;
if (x < 0) x = 0;
if (y < 0) y = 0;
if(w>bmp.Width-1) w= bmp.Width-1;
if(h>bmp.Height-1) h= bmp.Height-1;
//g.DrawRectangle(new Pen(item.ForeColor, 1.0f), x,y,w,h);
g.FillEllipse(new SolidBrush(item.ForeColor), x, y, w, h);
}
}
g.Flush();
g.Dispose();
//
//reloadPic(bmp);
ucImageView1.loadImage(bmp);
}
/// <summary>
/// 判断图片是否索引像素格式,是否是引发异常的像素格式
/// </summary>
/// <param name="imagePixelFormat">图片的像素格式</param>
/// <returns></returns>
private bool IsIndexedPixelFormat(System.Drawing.Imaging.PixelFormat imagePixelFormat)
{
PixelFormat[] pixelFormatArray = {
PixelFormat.Format1bppIndexed
,PixelFormat.Format4bppIndexed
,PixelFormat.Format8bppIndexed
,PixelFormat.Undefined
,PixelFormat.DontCare
,PixelFormat.Format16bppArgb1555
,PixelFormat.Format16bppGrayScale
};
foreach (PixelFormat pf in pixelFormatArray)
{
if (imagePixelFormat == pf)
{
return true;
}
}
return false;
}
}
}