728x90
728x170
▶ MainForm.cs
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Globalization;
using System.IO;
using System.Text;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Field
////////////////////////////////////////////////////////////////////////////////////////// Private
#region Field
/// <summary>
/// 카메라 정보 리스트
/// </summary>
private List<CameraInfo> cameraInfoList = new List<CameraInfo>();
/// <summary>
/// 축소/확대
/// </summary>
private float zoom = 1;
/// <summary>
/// 시작 X 좌표
/// </summary>
private int startX = 0;
/// <summary>
/// 시작 Y 좌표
/// </summary>
private int startY = 0;
/// <summary>
/// 이동 X 좌표
/// </summary>
private int moveX = 0;
/// <summary>
/// 이동 Y 좌표
/// </summary>
private int moveY = 0;
/// <summary>
/// 측정
/// </summary>
private double measure = 0;
/// <summary>
/// 객체 크기
/// </summary>
private double objectSize = 0;
/// <summary>
/// 객체 거리
/// </summary>
private double objectDistance = 0;
/// <summary>
/// 객체 크기 스케일
/// </summary>
private double objectSizeScale = .01;
/// <summary>
/// 객체 거리 스케일
/// </summary>
private double objectDistanceScale = 1;
/// <summary>
/// 측정 시작 X 좌표
/// </summary>
private int measureStartX = 0;
/// <summary>
/// 측정 시작 Y 좌표
/// </summary>
private int measureStartY = 0;
/// <summary>
/// 수평 여부
/// </summary>
private bool horizontal = true;
/// <summary>
/// 비트맵
/// </summary>
private Bitmap bitmap;
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 메인 폼 - MainForm()
/// <summary>
/// 메인 폼
/// </summary>
public MainForm()
{
InitializeComponent();
BuildCameraMenuItem();
#region 파일 열기 대화 상자를 설정한다.
this.openFileDialog.FileName = "";
this.openFileDialog.Filter = "이미지 파일|*.*|JPG|*.jpg";
this.openFileDialog.RestoreDirectory = true;
#endregion
#region 이벤트를 설정한다.
Load += Form_Load;
Resize += Form_Resize;
this.openImageMenuItem.Click += openImageMenuItem_Click;
this.exitMenuItem.Click += exitMenuItem_Click;
this.thumbnailPictureBox.MouseDown += thumbnailPictureBox_MouseDown;
this.zoomTrackBar.Scroll += zoomTrackBar_Scroll;
this.foscalLengthTextBox.TextChanged += foscalLengthTextBox_TextChanged;
this.cameraFactoryTextBox.TextChanged += cameraFactoryTextBox_TextChanged;
this.sensorWidthTextBox.TextChanged += foscalLengthTextBox_TextChanged;
this.sensorHeightTextBox.TextChanged += foscalLengthTextBox_TextChanged;
this.objectSizeTextBox.Click += objectSizeTextBox_Click;
this.objectSizeTextBox.TextChanged += objectSizeTextBox_TextChanged;
this.objectSizeScaleComboBox.TextChanged += objectSizeScaleComboBox_TextChanged;
this.objectSizeScaleComboBox.DropDownClosed += objectSizeScaleComboBox_DropDownClosed;
this.findDistanceButton.Click += findDistanceButton_Click;
this.findSizeButton.Click += findSizeButton_Click;
this.objectDistanceTextBox.Click += objectDistanceTextBox_Click;
this.objectDistanceTextBox.TextChanged += objectDistanceTextBox_TextChanged;
this.objectDistanceSacleComboBox.TextChanged += objectDistanceSacleComboBox_TextChanged;
this.objectDistanceSacleComboBox.DropDownClosed += objectDistanceSacleComboBox_DropDownClosed;
this.moveImageButton.Click += moveImageButton_Click;
this.measureButton.Click += measureButton_Click;
this.mainPictureBox.MouseDown += mainPictureBox_MouseDown;
this.mainPictureBox.MouseMove += mainPictureBox_MouseMove;
#endregion
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 폼 로드시 처리하기 - Form_Load(sender, e)
/// <summary>
/// 폼 로드시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Form_Load(object sender, EventArgs e)
{
UpdatePictureBox();
}
#endregion
#region 폼 크기 조정시 처리하기 - Form_Resize(sender, e)
/// <summary>
/// 폼 크기 조정시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void Form_Resize(object sender, EventArgs e)
{
UpdatePictureBox();
}
#endregion
#region 이미지 열기 메뉴 항목 클릭시 처리하기 - openImageMenuItem_Click(sender, e)
/// <summary>
/// 이미지 열기 메뉴 항목 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void openImageMenuItem_Click(object sender, EventArgs e)
{
if(this.openFileDialog.ShowDialog() == DialogResult.OK)
{
string imageFilePath = this.openFileDialog.FileName;
try
{
Image image = Image.FromFile(imageFilePath);
this.thumbnailPictureBox.Image = image;
this.zoomTrackBar.Value = 50;
this.startX = 0;
this.startY = 0;
this.objectSize = 0;
this.objectDistance = 0;
this.measure = 0;
this.objectDistanceTextBox.Text = string.Empty;
this.objectSizeTextBox.Text = string.Empty;
this.locationOnFileLabel.Text = "파일상 위치 (pixel) : ";
this.locationOnSenserLabel.Text = "센서상 위치 (mm) : ";
this.sizeOnSensorLabel.Text = "센서상 크기 (mm) : ";
this.imageWidthTextBox.Text = string.Empty;
this.imageHeightTextBox.Text = string.Empty;
this.foscalLengthTextBox.Text = string.Empty;
this.cameraFactoryTextBox.Text = string.Empty;
SetZoom();
PropertyItem propertyItem = image.GetPropertyItem(37386);
byte[] lowByteArray = new byte[propertyItem.Len / 2];
byte[] highByteArray = new byte[propertyItem.Len / 2];
Array.Copy(propertyItem.Value, 0 , lowByteArray , 0, propertyItem.Len / 2);
Array.Copy(propertyItem.Value, propertyItem.Len / 2, highByteArray, 0, propertyItem.Len / 2);
this.foscalLengthTextBox.Text = Convert.ToString((float)GetUnsignedInteger(lowByteArray) / GetUnsignedInteger(highByteArray));
this.imageWidthTextBox.Text = image.PhysicalDimension.Width.ToString();
this.imageHeightTextBox.Text = image.PhysicalDimension.Height.ToString();
if(image.PhysicalDimension.Width > image.PhysicalDimension.Height)
{
this.horizontal = true;
}
else
{
this.horizontal = false;
}
Encoding encoding = Encoding.ASCII;
string cameraFactory = encoding.GetString(image.GetPropertyItem(271).Value).Replace("\0", "\r\n");
cameraFactory += encoding.GetString(image.GetPropertyItem(272).Value);
this.cameraFactoryTextBox.Text = cameraFactory;
Text = "카메라 사진 크기 측정하기 " + " - " + openFileDialog.FileName;
}
catch
{
}
}
}
#endregion
#region 종료 메뉴 항목 클릭시 처리하기 - exitMenuItem_Click(sender, e)
/// <summary>
/// 종료 메뉴 항목 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void exitMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
#endregion
#region 썸네일 픽처 박스 마우스 DOWN 처리하기 - thumbnailPictureBox_MouseDown(sender, e)
/// <summary>
/// 썸네일 픽처 박스 마우스 DOWN 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void thumbnailPictureBox_MouseDown(object sender, MouseEventArgs e)
{
try
{
this.startX = this.thumbnailPictureBox.Image.Width * e.X / this.thumbnailPictureBox.Width;
this.startY = this.thumbnailPictureBox.Image.Height * e.Y / this.thumbnailPictureBox.Height;
UpdatePictureBox();
}
catch
{
}
}
#endregion
#region 축소/확대 트랙바 스크롤시 처리하기 - zoomTrackBar_Scroll(sender, e)
/// <summary>
/// 축소/확대 트랙바 스크롤시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void zoomTrackBar_Scroll(object sender, EventArgs e)
{
SetZoom();
}
#endregion
#region 초점 거리 텍스트 박스 텍스트 변경시 처리하기 - foscalLengthTextBox_TextChanged(sender, e)
/// <summary>
/// 초점 거리 텍스트 박스 텍스트 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void foscalLengthTextBox_TextChanged(object sender, EventArgs e)
{
string equivalenceString = string.Empty;
try
{
double equivalence = Math.Pow((Math.Pow(Convert.ToSingle(this.sensorWidthTextBox.Text), 2) +
Math.Pow(Convert.ToSingle(this.sensorHeightTextBox.Text), 2)), 0.5);
equivalence = Math.Round((43.2666153 / equivalence) * Convert.ToSingle(this.foscalLengthTextBox.Text));
equivalenceString = equivalence.ToString();
}
catch
{
}
this.equivalentTextBox.Text = equivalenceString;
}
#endregion
#region 카메라 공장 텍스트 박스 텍스트 변경시 처리하기 - cameraFactoryTextBox_TextChanged(sender, e)
/// <summary>
/// 카메라 공장 텍스트 박스 텍스트 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void cameraFactoryTextBox_TextChanged(object sender, EventArgs e)
{
SearchCamera();
}
#endregion
#region 객체 크기 텍스트 박스 클릭시 처리하기 - objectSizeTextBox_Click(sender, e)
/// <summary>
/// 객체 크기 텍스트 박스 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void objectSizeTextBox_Click(object sender, EventArgs e)
{
this.objectSizeTextBox.SelectionStart = 0;
this.objectSizeTextBox.SelectionLength = this.objectSizeTextBox.Text.Length;
}
#endregion
#region 객체 크기 텍스트 박스 텍스트 변경시 처리하기 - objectSizeTextBox_TextChanged(sender, e)
/// <summary>
/// 객체 크기 텍스트 박스 텍스트 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void objectSizeTextBox_TextChanged(object sender, EventArgs e)
{
if(this.objectSizeTextBox.Selected)
{
try
{
SetFindButton(true);
this.objectSize = Convert.ToDouble(this.objectSizeTextBox.Text) * this.objectSizeScale;
SetObjectDistance();
}
catch
{
}
}
}
#endregion
#region 객체 크기 스케일 콤보 박스 텍스트 변경시 처리하기 - objectSizeScaleComboBox_TextChanged(sender, e)
/// <summary>
/// 객체 크기 스케일 콤보 박스 텍스트 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void objectSizeScaleComboBox_TextChanged(object sender, EventArgs e)
{
this.objectSizeScale = GetSize(this.objectSizeScaleComboBox.Text);
this.objectSizeTextBox.Text = Convert.ToString(Math.Round(this.objectSize / this.objectSizeScale, 2));
}
#endregion
#region 객체 크기 스케일 콤보 박스 드롭 다운 닫은 경우 처리하기 - objectSizeScaleComboBox_DropDownClosed(sender, e)
/// <summary>
/// 객체 크기 스케일 콤보 박스 드롭 다운 닫은 경우 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void objectSizeScaleComboBox_DropDownClosed(object sender, EventArgs e)
{
this.zoomTrackBar.Select();
}
#endregion
#region 거리 찾기 버튼 클릭시 처리하기 - findDistanceButton_Click(sender, e)
/// <summary>
/// 거리 찾기 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void findDistanceButton_Click(object sender, EventArgs e)
{
SetFindButton(true);
}
#endregion
#region 크기 찾기 버튼 클릭시 처리하기 - findSizeButton_Click(sender, e)
/// <summary>
/// 크기 찾기 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void findSizeButton_Click(object sender, EventArgs e)
{
SetFindButton(false );
}
#endregion
#region 객체 거리 텍스트 박스 클릭시 처리하기 - objectDistanceTextBox_Click(sender, e)
/// <summary>
/// 객체 거리 텍스트 박스 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void objectDistanceTextBox_Click(object sender, EventArgs e)
{
this.objectDistanceTextBox.SelectionStart = 0;
this.objectDistanceTextBox.SelectionLength = this.objectDistanceTextBox.Text.Length;
}
#endregion
#region 객체 거리 텍스트 박스 텍스트 변경시 처리하기 - objectDistanceTextBox_TextChanged(sender, e)
/// <summary>
/// 객체 거리 텍스트 박스 텍스트 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void objectDistanceTextBox_TextChanged(object sender, EventArgs e)
{
if(this.objectDistanceTextBox.Selected)
{
try
{
SetFindButton(false);
this.objectDistance = Convert.ToDouble(this.objectDistanceTextBox.Text) * this.objectDistanceScale;
SetObjectSize();
}
catch
{
}
}
}
#endregion
#region 객체 거리 스케일 콤보 박스 텍스트 변경시 처리하기 - objectDistanceSacleComboBox_TextChanged(sender, e)
/// <summary>
/// 객체 거리 스케일 콤보 박스 텍스트 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void objectDistanceSacleComboBox_TextChanged(object sender, EventArgs e)
{
this.objectDistanceScale = GetSize(this.objectDistanceSacleComboBox.Text);
this.objectDistanceTextBox.Text = Convert.ToString(Math.Round(this.objectDistance / this.objectDistanceScale, 2));
}
#endregion
#region 객체 거리 스케일 콤보 박스 드롭 다운 닫은 경우 처리하기 - objectDistanceSacleComboBox_DropDownClosed(sender, e)
/// <summary>
/// 객체 거리 스케일 콤보 박스 드롭 다운 닫은 경우 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void objectDistanceSacleComboBox_DropDownClosed(object sender, EventArgs e)
{
this.zoomTrackBar.Select();
}
#endregion
#region 이미지 이동 버튼 클릭시 처리하기 - moveImageButton_Click(sender, e)
/// <summary>
/// 이미지 이동 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void moveImageButton_Click(object sender, EventArgs e)
{
this.moveImageButton.Checked = true;
this.measureButton.Checked = false;
this.mainPictureBox.Cursor = Cursors.Hand;
}
#endregion
#region 측정 버튼 클릭시 처리하기 - measureButton_Click(sender, e)
/// <summary>
/// 측정 버튼 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void measureButton_Click(object sender, EventArgs e)
{
this.moveImageButton.Checked = false;
this.measureButton.Checked = true;
this.mainPictureBox.Cursor = Cursors.Cross;
}
#endregion
#region 메인 픽처 박스 마우스 DOWN 처리하기 - mainPictureBox_MouseDown(sender, e)
/// <summary>
/// 메인 픽처 박스 마우스 DOWN 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void mainPictureBox_MouseDown(object sender, MouseEventArgs e)
{
if(this.moveImageButton.Checked)
{
this.moveX = e.X;
this.moveY = e.Y;
}
else
{
this.measureStartX = e.X;
this.measureStartY = e.Y;
}
}
#endregion
#region 메인 픽처 박스 마우스 이동시 처리하기 - mainPictureBox_MouseMove(sender, e)
/// <summary>
/// 메인 픽처 박스 마우스 이동시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void mainPictureBox_MouseMove(object sender, MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
if(this.moveImageButton.Checked)
{
this.startX -= e.X - this.moveX;
if(this.startX < 0)
{
this.startX = 0;
}
this.startY -= e.Y - this.moveY;
if(this.startY < 0)
{
this.startY = 0;
}
this.moveX = e.X;
this.moveY = e.Y;
UpdatePictureBox();
}
else
{
try
{
double differenceX = Math.Abs(this.measureStartX - e.X) * this.zoom * Convert.ToSingle(this.horizontal ? this.sensorWidthTextBox.Text :
this.sensorHeightTextBox.Text) / Convert.ToSingle(this.imageWidthTextBox.Text );
double differenceY = Math.Abs(this.measureStartY - e.Y) * this.zoom * Convert.ToSingle(this.horizontal ? this.sensorHeightTextBox.Text :
this.sensorWidthTextBox.Text ) / Convert.ToSingle(this.imageHeightTextBox.Text);
this.measure = Math.Pow((Math.Pow(differenceX, 2) + Math.Pow(differenceY, 2)), 0.5);
this.sizeOnSensorLabel.Text = "센서상 크기 (mm) : " + this.measure.ToString();
this.mainPictureBox.Refresh();
Graphics graphics = mainPictureBox.CreateGraphics();
graphics.ResetClip();
graphics.DrawLine(new Pen(Color.Red), this.measureStartX, this.measureStartY, e.X, e.Y);
if(this.findDistanceButton.Checked)
{
SetObjectDistance();
}
else
{
SetObjectSize();
}
}
catch
{
}
}
}
try
{
float fileX = this.startX + e.X * this.zoom;
float fileY = this.startY + e.Y * this.zoom;
float sensorX = fileX * Convert.ToSingle(this.horizontal ? this.sensorWidthTextBox.Text : this.sensorHeightTextBox.Text) /
Convert.ToSingle(this.imageWidthTextBox.Text );
float sensorY = fileY * Convert.ToSingle(this.horizontal ? this.sensorHeightTextBox.Text : this.sensorWidthTextBox.Text ) /
Convert.ToSingle(this.imageHeightTextBox.Text);
this.locationOnFileLabel.Text = "파일상 위치 (pixel) X :" + fileX.ToString() + " Y : " + fileY.ToString();
this.locationOnSenserLabel.Text= "센서상 위치 (mm) X : " + sensorX.ToString() + " Y : " + sensorY.ToString();
}
catch
{
}
}
#endregion
#region 카메라 메뉴 항목 클릭시 처리하기 - cameraMenuItem_Click(sender, e)
/// <summary>
/// 카메라 메뉴 항목 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void cameraMenuItem_Click(object sender, EventArgs e)
{
this.cameraFactoryTextBox.Text = ((ToolStripItem)sender).OwnerItem.Text;
this.cameraFactoryTextBox.Text += "\r\n" + ((ToolStripItem)sender).OwnerItem.Text + " " + ((ToolStripItem)sender).Text;
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Function
#region 카메라 메뉴 항목 구축하기 - BuildCameraMenuItem()
/// <summary>
/// 카메라 메뉴 항목 구축하기
/// </summary>
private void BuildCameraMenuItem()
{
this.cameraInfoList.Clear();
this.cameraMenuItem.DropDownItems.Clear();
string cameraListFilePath = Path.Combine(Application.StartupPath, @"DATA\CameraList.info");
if(File.Exists(cameraListFilePath))
{
string content = File.ReadAllText(cameraListFilePath);
string[] lineArray = content.Split('\n');
CultureInfo cultureInfo = new CultureInfo("en-US");
foreach(string line in lineArray)
{
if(string.IsNullOrWhiteSpace(line))
{
continue;
}
if(line.StartsWith("//"))
{
continue;
}
string[] tokenArray = line.Split(new string[] { "," }, StringSplitOptions.None);
try
{
CameraInfo cameraInfo = new CameraInfo();
cameraInfo.Factory = tokenArray[0].Trim();
cameraInfo.Model = tokenArray[1].Trim();
cameraInfo.AliasName = tokenArray[2].Trim();
cameraInfo.SensorType = tokenArray[3].Trim();
cameraInfo.SensorWidth = Single.Parse(tokenArray[4], cultureInfo);
cameraInfo.SensorHeight = Single.Parse(tokenArray[5], cultureInfo);
this.cameraInfoList.Add(cameraInfo);
bool newFactory = true;
foreach(ToolStripMenuItem menuItem in this.cameraMenuItem.DropDownItems)
{
if(menuItem.Text.Contains(cameraInfo.Factory))
{
newFactory = false;
break;
}
}
if(newFactory)
{
this.cameraMenuItem.DropDownItems.Add(cameraInfo.Factory);
}
foreach(ToolStripMenuItem menuItem in this.cameraMenuItem.DropDownItems)
{
if(menuItem.Text.Contains(cameraInfo.Factory))
{
menuItem.DropDownItems.Add(cameraInfo.Model + (cameraInfo.AliasName == "" ? "" : " - " + cameraInfo.AliasName ),
null, cameraMenuItem_Click);
}
}
}
catch
{
}
}
}
}
#endregion
#region 픽처 박스 업데이트 하기 - UpdatePictureBox()
/// <summary>
/// 픽처 박스 업데이트 하기
/// </summary>
private void UpdatePictureBox()
{
try
{
this.bitmap = new Bitmap(this.mainPictureBox.Width, this.mainPictureBox.Height);
Graphics bitmapGraphics = Graphics.FromImage(this.bitmap);
bitmapGraphics.SmoothingMode = SmoothingMode.AntiAlias;
bitmapGraphics.DrawImage
(
this.thumbnailPictureBox.Image,
new Rectangle(0, 0, this.mainPictureBox.Width, this.mainPictureBox.Height),
new Rectangle(this.startX, this.startY, (int)(this.mainPictureBox.Width * this.zoom), (int)(this.mainPictureBox.Height * this.zoom)),
GraphicsUnit.Pixel
);
this.mainPictureBox.Image = this.bitmap;
}
catch
{
}
}
#endregion
#region 카메라 찾기 - SearchCamera()
/// <summary>
/// 카메라 찾기
/// </summary>
private void SearchCamera()
{
this.sensorTypeTextBox.Text = string.Empty;
this.sensorHeightTextBox.Text = string.Empty;
this.sensorWidthTextBox.Text = string.Empty;
this.cameraPictureBox.Image = null;
this.toolTip.SetToolTip(this.cameraPictureBox, string.Empty);
string searchControl = "MRK";
string camereName = this.cameraFactoryTextBox.Text.Replace(" ", "").Replace("-", "").ToLower() + searchControl;
bool cameraFound = false;
byte cameraLoop = 0;
do
{
foreach(CameraInfo cameraInfo in this.cameraInfoList)
{
if(camereName.Contains(cameraInfo.Factory.Replace(" ", "").ToLower()) && !cameraFound)
{
if(camereName.Contains(cameraInfo.Model.Replace(" ", "").Replace("-", "").ToLower() + searchControl) ||
(camereName.Contains(cameraInfo.AliasName.Replace(" ", "").Replace("-", "").ToLower() + searchControl) && cameraInfo.AliasName != ""))
{
this.sensorTypeTextBox.Text = cameraInfo.SensorType;
this.sensorWidthTextBox.Text = cameraInfo.SensorWidth.ToString();
this.sensorHeightTextBox.Text = cameraInfo.SensorHeight.ToString();
this.toolTip.SetToolTip(this.cameraPictureBox, cameraInfo.Factory + " " + cameraInfo.Model);
string cameraImageFilePath = Application.StartupPath + "\\Data\\" + cameraInfo.Factory + "_" +
cameraInfo.Model.Replace(" ", "").Replace("-", "") + ".gif";
if(File.Exists(cameraImageFilePath))
{
this.cameraPictureBox.Image = Image.FromFile(cameraImageFilePath);
}
cameraFound = true;
}
}
}
searchControl = string.Empty;
cameraLoop++;
}
while(!cameraFound && cameraLoop < 2);
}
#endregion
#region 축소/확대 설정하기 - SetZoom()
/// <summary>
/// 축소/확대 설정하기
/// </summary>
private void SetZoom()
{
this.zoom = 50 / (float)zoomTrackBar.Value;
this.toolTip.SetToolTip(zoomTrackBar ,"줌 배율 : " + Convert.ToString((100 / this.zoom)) + "%");
UpdatePictureBox();
}
#endregion
#region 부호 없는 정수 구하기 - GetUnsignedInteger(sourceArray)
/// <summary>
/// 부호 없는 정수 구하기
/// </summary>
/// <param name="sourceArray">소스 배열</param>
/// <returns>부호 없는 정수</returns>
private uint GetUnsignedInteger(byte[] sourceArray)
{
if(sourceArray.Length != 4)
{
return 0;
}
else
{
return Convert.ToUInt32(sourceArray[3] << 24 | sourceArray[2] << 16 | sourceArray[1] << 8 | sourceArray[0]);
}
}
#endregion
#region 객체 거리 설정하기 - SetObjectDistance()
/// <summary>
/// 객체 거리 설정하기
/// </summary>
private void SetObjectDistance()
{
this.objectDistanceTextBox.Text = string.Empty;
try
{
this.objectDistance = this.objectSize / (this.measure / Convert.ToDouble(this.foscalLengthTextBox.Text));
this.objectDistanceTextBox.Text = Convert.ToString(Math.Round(this.objectDistance / this.objectDistanceScale, 2));
}
catch
{
}
}
#endregion
#region 객체 크기 설정하기 - SetObjectSize()
/// <summary>
/// 객체 크기 설정하기
/// </summary>
private void SetObjectSize()
{
this.objectSizeTextBox.Text = string.Empty;
try
{
this.objectSize = this.objectDistance * (this.measure / Convert.ToDouble(this.foscalLengthTextBox.Text));
this.objectSizeTextBox.Text = Convert.ToString(Math.Round(this.objectSize / this.objectSizeScale, 2));
}
catch
{
}
}
#endregion
#region 찾기 버튼 설정하기 - SetFindButton(isChecked)
/// <summary>
/// 찾기 버튼 설정하기
/// </summary>
/// <param name="isChecked">체크 여부</param>
private void SetFindButton(bool isChecked)
{
this.findDistanceButton.Checked = isChecked;
this.findSizeButton.Checked = !isChecked;
if(isChecked)
{
SetObjectDistance();
}
else
{
SetObjectSize();
}
}
#endregion
#region 크기 구하기 - GetSize(sizeUnit)
/// <summary>
/// 크기 구하기
/// </summary>
/// <param name="sizeUnit">크기 단위</param>
/// <returns>크기</returns>
private double GetSize(string sizeUnit)
{
switch(sizeUnit.Trim().ToLower())
{
case "mm" : return .001;
case "cm" : return .01;
case "m" : return 1;
case "km" : return 1000;
case "inch" : return .0254;
case "foot" : return .3048;
case "mile" : return 1609.344;
}
return 0;
}
#endregion
}
}
728x90
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] 데스크톱 배경 그리기 (0) | 2018.11.20 |
---|---|
[C#/WINFORM] 오버레이 텍스트 비트맵 만들기 (0) | 2018.11.19 |
[C#/WINFORM] 스테가노그래피 이미지 만들기 (0) | 2018.11.18 |
[C#/WINFORM] BindingSource 클래스 사용하기 (0) | 2018.11.18 |
[C#/WINFORM] ProgressBar 클래스 : 색상 변경하기 (0) | 2018.11.17 |
[C#/WINFORM] 팬시 텍스트 만들기 (0) | 2018.11.11 |
[C#/WINFORM] 커스텀 안티-알리아싱 만들기 (0) | 2018.11.11 |
[C#/WINFORM] 이미지 윤곽선 검출하기 (0) | 2018.11.10 |
[C#/WINFORM] 게이지 컨트롤 사용하기 (0) | 2018.11.10 |
[C#/WINFORM] 복수 UI 스레드 만들기 (0) | 2018.11.03 |