/*========================================================================= * * Copyright NumFOCUS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0.txt * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * *=========================================================================*/ #ifndef itkRGBPixel_hxx #define itkRGBPixel_hxx #include "itkNumericTraits.h" #include "itkMath.h" #include namespace itk { template RGBPixel & RGBPixel::operator=(const ComponentType r[3]) { BaseArray::operator=(r); return *this; } template RGBPixel RGBPixel::operator+(const Self & r) const { Self result; for (unsigned int i = 0; i < 3; ++i) { result[i] = (*this)[i] + r[i]; } return result; } template RGBPixel RGBPixel::operator-(const Self & r) const { Self result; for (unsigned int i = 0; i < 3; ++i) { result[i] = (*this)[i] - r[i]; } return result; } template const RGBPixel & RGBPixel::operator+=(const Self & r) { for (unsigned int i = 0; i < 3; ++i) { (*this)[i] += r[i]; } return *this; } template const RGBPixel & RGBPixel::operator-=(const Self & r) { for (unsigned int i = 0; i < 3; ++i) { (*this)[i] -= r[i]; } return *this; } template const RGBPixel & RGBPixel::operator*=(const ComponentType & r) { for (unsigned int i = 0; i < 3; ++i) { (*this)[i] *= r; } return *this; } template const RGBPixel & RGBPixel::operator/=(const ComponentType & r) { for (unsigned int i = 0; i < 3; ++i) { (*this)[i] /= r; } return *this; } template RGBPixel RGBPixel::operator*(const ComponentType & r) const { Self result; for (unsigned int i = 0; i < 3; ++i) { result[i] = (*this)[i] * r; } return result; } template RGBPixel RGBPixel::operator/(const ComponentType & r) const { Self result; for (unsigned int i = 0; i < 3; ++i) { result[i] = (*this)[i] / r; } return result; } template bool RGBPixel::operator==(const Self & r) const { return this->BaseArray::operator==(r); } template bool RGBPixel::operator<(const Self & r) const { return std::lexicographical_compare(this->cbegin(), this->cend(), r.cbegin(), r.cend()); } template auto RGBPixel::GetLuminance() const -> LuminanceType { const LuminanceType luminance = 0.30 * static_cast(this->GetRed()) + 0.59 * static_cast(this->GetGreen()) + 0.11 * static_cast(this->GetBlue()); return luminance; } template std::ostream & operator<<(std::ostream & os, const RGBPixel & c) { os << static_cast::PrintType>(c[0]) << " "; os << static_cast::PrintType>(c[1]) << " "; os << static_cast::PrintType>(c[2]); return os; } template std::istream & operator>>(std::istream & is, RGBPixel & c) { TComponent red; TComponent green; TComponent blue; is >> red >> green >> blue; c.SetRed(red); c.SetGreen(green); c.SetBlue(blue); return is; } } // end namespace itk #endif