BitRollingLeft

1 개요

스칼라 또는 이미지와의 BitRollingLeft 연산을 수행하는 알고리즘입니다. 이미지 픽셀 값을 스칼라 또는 대응되는 이미지 픽셀 값만큼 왼쪽 방향으로 비트를 롤링시킵니다.

2 알고리즘 상세 설명

Source Scalar Value : (3, 5, 2)
Result
Source Result
Fig. Scalar 값에 따른 결과 비교

Source
Operand Result
Source Operand Operand result
Fig. Image 값에 따른 결과 비교

BitRollingLeft 알고리즘은 각 채널에 대해 BitRollingLeft 연산을 수행합니다. 스칼라 연산과 이미지 연산을 지원합니다.

3 파라미터 설정 및 사용 방법

  1. Term Order 설정

    • Term Order를 설정합니다.
    • API
      SetTermOrder(ETermOrder);
      
    • 기본 값
      • ETermOrder_SourceOperand
    • ETermOrder_SourceOperand 설정 시 일반적인 동작 ETermOrder_OperandSource 설정 시 Operand가 Source가 되고 Source가 Operand가 된 채로 연산됩니다.
  2. 스칼라 연산 설정

    • Source 픽셀의 각 채널에 대해 Scalar 연산을 수행 할 Scalar 값을 설정합니다.

    • 실수형 입력 시 정수 형으로 변환되어 처리되어집니다.

    • API

      SetScalarValue(Base::CMultiVar<double>);
      SetScalarValue(Base::CMultiVar<float>);
      SetScalarValue(Base::CMultiVar<int64_t>);
      SetScalarValue(Base::CMultiVar<int32_t>);
      SetScalarValue(Base::CMultiVar<uint32_t>);
      SetScalarValue(Base::CMultiVar<uint64_t>);
      
    • 예제 코드

      COperationBitRollingLeft BitRollingLeft;
      CFLImage fliSourceImage;
      CFLImage fliDestinationImage;
      
      // 지정된 경로에서 이미지 로드
      if(fliSourceImage.Load(L"../../ExampleImages/OperationBitRolling/wave.flif").IsFail()) 
      	break;
      
      BitRollingLeft.SetSourceImage(fliSourceImage);
      BitRollingLeft.SetDestinationImage(fliDestinationImage);
      // 연산 방식 설정
      BitRollingLeft.SetOperationSource(EOperationSource_Scalar);
      // 스칼라 값 설정
      CMultiVar<double> mvScalar(3.000000, 5.000000, 2.000000);
      
      BitRollingLeft.SetScalarValue(mvScalar);
      
      // 알고리즘 수행
      if(BitRollingLeft.Execute().IsFail())
      	break;
      
      // 수행된 결과 이미지를 저장
      if(fliDestinationImage.Save(L"../../ExampleImages/OperationBitRolling/Result.flif").IsFail())
      	break;
      
      COperationBitRollingLeft BitRollingLeft = new COperationBitRollingLeft();
      CFLImage fliSourceImage = new CFLImage();
      CFLImage fliDestinationImage = new CFLImage();
      
      // 지정된 경로에서 이미지 로드
      if(fliSourceImage.Load("../../ExampleImages/OperationBitRolling/wave.flif").IsFail())
      	break;
      
      BitRollingLeft.SetSourceImage(ref fliSourceImage);
      BitRollingLeft.SetDestinationImage(ref fliDestinationImage);
      // 연산 방식 설정
      BitRollingLeft.SetOperationSource(EOperationSource.Scalar);
      // 스칼라 값 설정
      CMultiVar<double> mvScalar = new CMultiVar<double>(3.000000, 5.000000, 2.000000);
      
      BitRollingLeft.SetScalarValue(mvScalar);
      
      // 알고리즘 수행
      if(BitRollingLeft.Execute().IsFail())
      	break;
      
      // 수행된 결과 이미지를 저장
      if(fliDestinationImage.Save("../../ExampleImages/OperationBitRolling/Result.flif").IsFail())
      	break;
      
  3. 이미지 연산 설정

    • Operand 이미지를 설정합니다.

    • API

      SetOperandImage(Base::CFLImage);
      
    • 예제 코드

      COperationBitRollingLeft BitRollingLeft;
      CFLImage fliSourceImage;
      CFLImage fliOperandImage;
      CFLImage fliDestinationImage;
      
      // 지정된 경로에서 이미지 로드
      if(fliSourceImage.Load(L"../../ExampleImages/OperationBitRolling/wave.flif").IsFail())
      	break;
      if(fliOperandImage.Load(L"../../ExampleImages/OperationBitRolling/wave.flif").IsFail())
      	break;
      
      BitRollingLeft.SetSourceImage(fliSourceImage);
      // Operand 이미지 설정
      BitRollingLeft.SetOperandImage(fliOperandImage);
      BitRollingLeft.SetDestinationImage(fliDestinationImage);
      
      // Operation 방식 설정
      BitRollingLeft.SetOperationSource(EOperationSource_Image);
      
      // 알고리즘 수행
      if(BitRollingLeft.Execute().IsFail())
      	break;
      
      // 수행된 결과 이미지를 저장
      if(fliDestinationImage.Save(L"../../ExampleImages/OperationBitRolling/Result.flif").IsFail())
      	break;
      
      COperationBitRollingLeft BitRollingLeft = new COperationBitRollingLeft();
      CFLImage fliSourceImage = new CFLImage();
      CFLImage fliOperandImage = new CFLImage();
      CFLImage fliDestinationImage = new CFLImage();
      
      // 지정된 경로에서 이미지 로드
      if(fliSourceImage.Load("../../ExampleImages/OperationBitRolling/wave.flif").IsFail())
      	break;
      if(fliOperandImage.Load("../../ExampleImages/OperationBitRolling/wave.flif").IsFail())
      	break;
      
      BitRollingLeft.SetSourceImage(ref fliSourceImage);
      // Operand 이미지 설정
      BitRollingLeft.SetOperandImage(ref fliOperandImage);
      BitRollingLeft.SetDestinationImage(ref fliDestinationImage);
      
      BitRollingLeft.SetOperationSource(EOperationSource.Image);
      
      // 알고리즘 수행
      if(BitRollingLeft.Execute().IsFail())
      	break;
      
      // 수행된 결과 이미지를 저장
      if(fliDestinationImage.Save("../../ExampleImages/OperationBitRolling/Result.flif").IsFail())
      	break;