99 lines
3.8 KiB
C#
99 lines
3.8 KiB
C#
/*
|
|
* Copyright (c) 2025 LG Electronics Inc.
|
|
* SPDX-License-Identifier: LicenseRef-LGE-Proprietary
|
|
*/
|
|
using Aurora.Api;
|
|
using VisionCommon;
|
|
using Cognex.VisionPro;
|
|
using System;
|
|
using Cognex.VisionPro.ImageProcessing;
|
|
using CogCommon;
|
|
|
|
namespace CogCamera {
|
|
/// <summary>
|
|
/// 이미지 반전 및 회전을 위한 Tool
|
|
/// </summary>
|
|
public class CogImgFlipAndRotationTool : ImgToolBase {
|
|
private Logger _Logger;
|
|
private CogIPOneImageTool _CogIPOneImageTool = new CogIPOneImageTool();
|
|
|
|
/// <summary>
|
|
/// 생성자
|
|
/// </summary>
|
|
/// <param name="camId">카메라 ID</param>
|
|
/// <param name="camConfig">카메라 컨피그</param>
|
|
public CogImgFlipAndRotationTool(eCamId camId, CamConfig camConfig) : base(camId, camConfig) {
|
|
_Logger = new Logger(string.Format("MilImgFlipAndRotationTool[{0}]", camId));
|
|
|
|
SetFlipAndRotation();
|
|
}
|
|
|
|
private void SetFlipAndRotation() {
|
|
var imgFlipRotate = new CogIPOneImageFlipRotate();
|
|
imgFlipRotate.Enabled = true;
|
|
|
|
if (IsFlipEnabled() && !IsRotationEnabled()) { // Flip
|
|
ApplyFlip(ref imgFlipRotate);
|
|
}
|
|
else if (!IsFlipEnabled() && IsRotationEnabled()) { // Rotation
|
|
ApplyRotation(ref imgFlipRotate);
|
|
}
|
|
else if (IsFlipEnabled() && IsRotationEnabled()) { // Flip & Rotation
|
|
ApplyFlip(ref imgFlipRotate);
|
|
ApplyRotation(ref imgFlipRotate);
|
|
}
|
|
else { // None
|
|
imgFlipRotate.Enabled = false;
|
|
}
|
|
|
|
_CogIPOneImageTool.Operators.Add(imgFlipRotate);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 이미지 반전 및 회전
|
|
/// </summary>
|
|
/// <param name="srcImage">소스 이미지</param>
|
|
/// <param name="filteredImage">결과 이미지</param>
|
|
public void FlipAndRotation(ICogImage srcImage, ref ICogImage filteredImage) {
|
|
try {
|
|
_CogIPOneImageTool.InputImage = srcImage;
|
|
_CogIPOneImageTool.Run();
|
|
CogEnvironment.CopyImage(_CogIPOneImageTool.OutputImage, ref filteredImage);
|
|
}
|
|
catch (Exception e) {
|
|
_Logger.FuncE(e.Message);
|
|
}
|
|
}
|
|
|
|
private void ApplyFlip(ref CogIPOneImageFlipRotate imgFlipRotate) {
|
|
try {
|
|
if (CamConfig.FlipAndRotation.ImageFlip.Equals(eImageFlip.LeftToRight)) {
|
|
imgFlipRotate.OperationInPixelSpace = CogIPOneImageFlipRotateOperationConstants.Flip;
|
|
}
|
|
else if (CamConfig.FlipAndRotation.ImageFlip.Equals(eImageFlip.TopToBottom)) {
|
|
imgFlipRotate.OperationInPixelSpace = CogIPOneImageFlipRotateOperationConstants.FlipAndRotate180Deg;
|
|
}
|
|
}
|
|
catch (Exception e) {
|
|
_Logger.FuncE(e.Message);
|
|
}
|
|
}
|
|
|
|
private void ApplyRotation(ref CogIPOneImageFlipRotate imgFlipRotate) {
|
|
try {
|
|
if (CamConfig.FlipAndRotation.ImageRotation.Equals(eImageRotation.CW_DEG_90)) {
|
|
imgFlipRotate.OperationInPixelSpace = CogIPOneImageFlipRotateOperationConstants.Rotate90Deg;
|
|
}
|
|
else if (CamConfig.FlipAndRotation.ImageRotation.Equals(eImageRotation.CW_DEG_180)) {
|
|
imgFlipRotate.OperationInPixelSpace = CogIPOneImageFlipRotateOperationConstants.Rotate180Deg;
|
|
}
|
|
else if (CamConfig.FlipAndRotation.ImageRotation.Equals(eImageRotation.CW_DEG_270)) {
|
|
imgFlipRotate.OperationInPixelSpace = CogIPOneImageFlipRotateOperationConstants.Rotate270Deg;
|
|
}
|
|
}
|
|
catch (Exception e) {
|
|
_Logger.FuncE(e.Message);
|
|
}
|
|
}
|
|
}
|
|
} |