You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Code/Editor/Util/ImageHistogram.h

59 lines
1.8 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#ifndef CRYINCLUDE_EDITOR_UTIL_IMAGEHISTOGRAM_H
#define CRYINCLUDE_EDITOR_UTIL_IMAGEHISTOGRAM_H
#pragma once
#include "Include/EditorCoreAPI.h"
class EDITOR_CORE_API CImageHistogram
{
public:
static const int kNumChannels = 4;
static const int kNumColorLevels = 256;
enum EImageFormat
{
eImageFormat_8BPP,
eImageFormat_24BPP_RGB,
eImageFormat_24BPP_BGR,
eImageFormat_32BPP_RGBA,
eImageFormat_32BPP_BGRA,
eImageFormat_32BPP_ARGB,
eImageFormat_32BPP_ABGR
};
CImageHistogram();
virtual ~CImageHistogram();
// Description:
// Compute the histogram of an image
// Arguments:
// pImageData - the image data
// aWidth - the width of the image in pixels
// aHeight - the height of the image in pixels
// aBitsPerPixel - the number of bits per pixel, currently supported: 8 (monochrome), 24 (RGB) and 32 (RGBA)
void ComputeHistogram(BYTE* pImageData, unsigned int aWidth, unsigned int aHeight, EImageFormat aFormat = eImageFormat_32BPP_RGBA);
void ClearHistogram();
void CopyComputedDataFrom(CImageHistogram* histogram);
protected:
void ComputeStatisticsForChannel(int aIndex);
public:
unsigned int m_count[kNumChannels][kNumColorLevels];
unsigned int m_lumCount[kNumColorLevels];
unsigned int m_maxCount[kNumChannels];
unsigned int m_maxLumCount;
float m_mean[kNumChannels], m_stdDev[kNumChannels], m_median[kNumChannels];
float m_meanAvg, m_stdDevAvg, m_medianAvg;
EImageFormat m_imageFormat;
};
#endif // CRYINCLUDE_EDITOR_UTIL_IMAGEHISTOGRAM_H