/*
* 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 {
///
/// 이미지 반전 및 회전을 위한 Tool
///
public class CogImgFlipAndRotationTool : ImgToolBase {
private Logger _Logger;
private CogIPOneImageTool _CogIPOneImageTool = new CogIPOneImageTool();
///
/// 생성자
///
/// 카메라 ID
/// 카메라 컨피그
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);
}
///
/// 이미지 반전 및 회전
///
/// 소스 이미지
/// 결과 이미지
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);
}
}
}
}