176 lines
6.1 KiB
C#
176 lines
6.1 KiB
C#
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;
|
|
}
|
|
|
|
|
|
}
|
|
}
|