Developer Application Interface (ARC API) v4.5.8
ARC, Inc. GenIV Application Interface
CArcImage.h
1// +------------------------------------------------------------------------------------------------------------------+
2// | FILE: CArcImage.h ( GenIV ) |
3// +------------------------------------------------------------------------------------------------------------------+
4// | PURPOSE: This file defines the standard ARC image operations interface. |
5// | |
6// | AUTHOR: Scott Streit DATE: October 17, 2014 |
7// | |
8// | Copyright 2014 Astronomical Research Cameras, Inc. All rights reserved. |
9// +------------------------------------------------------------------------------------------------------------------+
12#pragma once
13
14#ifdef _WINDOWS
15 #pragma warning( disable: 4251 )
16#endif
17
18#include <stdexcept>
19#include <cstdint>
20#include <memory>
21
22#include <functional>
23
24#include <CArcImageDllMain.h>
25#include <CArcBase.h>
26
27
28
29namespace arc
30{
31 namespace gen4
32 {
33 namespace image
34 {
35
39 using BPP_16 = std::uint16_t;
40
41
45 using BPP_32 = std::uint32_t;
46
47
51 struct GEN4_CARCIMAGE_API avgStats_t final
52 {
56 avgStats_t( const std::uint32_t channelCount );
57
60 ~avgStats_t( void ) = default;
61
62 std::unique_ptr<double[]> pAverageMin;
63 std::unique_ptr<double[]> pAverageMax;
64 std::unique_ptr<double[]> pAverageMean;
65 std::unique_ptr<double[]> pAverageStdDev;
67 double gMeanOfMeans;
71 std::uint32_t uiChannelCount;
72 std::uint32_t uiImageCount;
73 };
74
75
79 struct GEN4_CARCIMAGE_API stats_t final
80 {
83 stats_t( void );
84
87 ~stats_t( void ) = default;
88
92 const std::string toString( void ) const noexcept;
93
94 double gTotalPixels;
95 double gMin;
96 double gMax;
97 double gMean;
98 double gVariance;
99 double gStdDev;
101 };
102
103
107 struct GEN4_CARCIMAGE_API difStats_t final
108 {
111 difStats_t( void ) = default;
112
115 ~difStats_t( void ) = default;
116
120 const std::string toString( void ) const noexcept;
121
125 };
126
127 } // end image namespace
128
129
130
136 template <typename T = arc::gen4::image::BPP_16>
137 class GEN4_CARCIMAGE_API CArcImage : public arc::gen4::CArcBase
138 {
139 public:
140
143 virtual ~CArcImage( void ) = default;
144
148 static auto version( void ) noexcept -> const std::string;
149
158 static auto fill( T* pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows, const T uiValue ) -> void;
159
167 static auto fill( T* pBuf, const std::size_t uiBytes, const T uiValue ) -> void;
168
175 static auto fillWithGradient( T* pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> void;
176
183 static auto fillWithSmiley( T* pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> void;
184
191 static auto fillWithRamp( T* pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> void;
192
200 static auto containsValidRamp( const T* pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> void;
201
210 static auto containsValidArc440Synthetic( const T* pBuf, const std::uint32_t uiPixelsPerChannel, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> void;
211
219 static auto containsValidArc420Synthetic( const T* pBuf, const std::uint16_t uwValue1 = 0x1234, const std::uint16_t uwValue2 = 0x6789 ) -> void;
220
229 static auto countPixels( const T* pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows, const std::uint16_t uwValue ) -> std::uint32_t;
230
238 static auto countPixels( const T* pBuf, const std::size_t uiBufSize, const std::uint16_t uwValue ) -> std::uint32_t;
239
253 static auto getChannel( const T* pBuf, const std::uint32_t uiChannel, const std::uint32_t uiChannelCount, const std::uint32_t uiStart, const std::uint32_t uiEnd, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t& uiCount ) -> std::unique_ptr<T[]>;
254
265 static auto getPixel( const T* pBuf, const std::uint32_t uiCol, const std::uint32_t uiRow, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> T;
266
280 static auto getRegion( const T* pBuf, const std::uint32_t uiCol1, const std::uint32_t uiCol2, const std::uint32_t uiRow1, const std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t& uiCount ) -> std::unique_ptr<T[]>;
281
294 static auto getRow( const T* pBuf, const std::uint32_t uiCol1, const std::uint32_t uiCol2, const std::uint32_t uiRow, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t& uiCount ) -> std::unique_ptr<T[]>;
295
307 static auto getCol( const T* pBuf, const std::uint32_t uiCol, const std::uint32_t uiRow1, const std::uint32_t uiRow2, const std::uint32_t uiCols, std::uint32_t& uiCount ) -> std::unique_ptr<T[]>;
308
322 static auto getRowArea( const T* pBuf, const std::uint32_t uiCol1, const std::uint32_t uiCol2, const std::uint32_t uiRow1, const std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t& uiCount ) -> std::unique_ptr<double[]>;
323
337 static auto getColArea( const T* pBuf, const std::uint32_t uiCol1, const std::uint32_t uiCol2, const std::uint32_t uiRow1, const std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t& uiCount ) -> std::unique_ptr<double[]>;
338
353 static auto getStats( std::vector<T*> vBufferList, const std::uint32_t uiChannelCount, const std::uint32_t uiCol1, const std::uint32_t uiCol2, const std::uint32_t uiRow1, const std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> std::unique_ptr<arc::gen4::image::avgStats_t>;
354
368 static auto getStats( const T* pBuf, const std::uint32_t uiCol1, const std::uint32_t uiCol2, const std::uint32_t uiRow1, const std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> std::unique_ptr<arc::gen4::image::stats_t>;
369
379 static auto getStats( const T* pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> std::unique_ptr<arc::gen4::image::stats_t>;
380
397 static auto getDiffStats( const T* pBuf1, const T* pBuf2, const std::uint32_t uiCol1, std::uint32_t uiCol2, const std::uint32_t uiRow1, std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> std::unique_ptr<arc::gen4::image::difStats_t>;
398
411 static auto getDiffStats( const T* pBuf1, const T* pBuf2, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> std::unique_ptr<arc::gen4::image::difStats_t>;
412
426 static auto histogram( const T* pBuf, const std::uint32_t uiCol1, std::uint32_t uiCol2, const std::uint32_t uiRow1, std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t& uiCount ) -> std::unique_ptr<std::uint32_t[]>;
427
437 static auto histogram( const T* pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t& uiCount ) -> std::unique_ptr<std::uint32_t[]>;
438
448 static auto add( const T* pBuf1, const T* pBuf2, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> std::unique_ptr<std::uint64_t[]>;
449
459 static auto subtract( const T* pBuf1, const T* pBuf2, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> std::unique_ptr<T[]>;
460
468 static auto subtractHalves( T* pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> void;
469
479 static auto divide( const T* pBuf1, const T* pBuf2, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> std::unique_ptr<T[]>;
480
490 static auto copy( T* pDstBuf, const T* pSrcBuf, const std::uint32_t uiCols, const std::uint32_t uiRows ) -> void;
491
500 static auto copy( T* pDstBuf, const T* pSrcBuf, const std::size_t uiSize ) -> void;
501
505 static auto maxTVal( void ) -> std::uint32_t;
506
507 private:
508
512 CArcImage( void ) = default;
513
515 CArcImage( const CArcImage& ) = delete;
516
518 CArcImage( CArcImage&& ) = delete;
519
521 CArcImage& operator=( const CArcImage& ) = delete;
522
524 CArcImage& operator=( CArcImage&& ) = delete;
525
531 static inline auto verifyRow( const std::uint32_t uiRow, const std::uint32_t uiRows ) -> void;
532
537 static inline auto verifyRows( const std::uint32_t uiRows ) -> void;
538
543 static inline auto verifyColumns( const std::uint32_t uiCols ) -> void;
544
550 static inline auto verifyColumn( const std::uint32_t uiCol, const std::uint32_t uiCols ) -> void;
551
557 static inline auto verifyRangeOrder( const std::uint32_t uiValue1, const std::uint32_t uiValue2 ) -> void;
558
570 static auto drawSemiCircle( const std::uint32_t uiXCenter, const std::uint32_t uiYCenter, const std::uint32_t uiRadius, const double gStartAngle, const double gEndAngle, const std::uint32_t uiCols, T* pBuf, const T uiColor = 0 ) -> void;
571
581 static auto drawFillCircle( const std::uint32_t uiXCenter, const std::uint32_t uiYCenter, const std::uint32_t uiRadius, const std::uint32_t uiCols, T* pBuf, const T uiColor = 0 ) -> void;
582
591 static auto drawGradientFillCircle( const std::uint32_t uiRadius, const std::uint32_t uiCols, const std::uint32_t uiRows, T* pBuf ) -> void;
592
602 static auto drawCircle( const std::uint32_t uiXCenter, const std::uint32_t uiYCenter, const std::uint32_t uiRadius, const std::uint32_t uiCols, T* pBuf, const T uiColor = 0 ) -> void;
603
605 static const std::string m_sVersion;
606 };
607
608
609 } // end gen4 namespace
610} // end arc namespace
static auto fillWithRamp(T *pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows) -> void
virtual ~CArcImage(void)=default
static auto getStats(const T *pBuf, const std::uint32_t uiCol1, const std::uint32_t uiCol2, const std::uint32_t uiRow1, const std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows) -> std::unique_ptr< arc::gen4::image::stats_t >
static auto getChannel(const T *pBuf, const std::uint32_t uiChannel, const std::uint32_t uiChannelCount, const std::uint32_t uiStart, const std::uint32_t uiEnd, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t &uiCount) -> std::unique_ptr< T[]>
static auto fillWithGradient(T *pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows) -> void
static auto subtract(const T *pBuf1, const T *pBuf2, const std::uint32_t uiCols, const std::uint32_t uiRows) -> std::unique_ptr< T[]>
static auto getPixel(const T *pBuf, const std::uint32_t uiCol, const std::uint32_t uiRow, const std::uint32_t uiCols, const std::uint32_t uiRows) -> T
static auto getRegion(const T *pBuf, const std::uint32_t uiCol1, const std::uint32_t uiCol2, const std::uint32_t uiRow1, const std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t &uiCount) -> std::unique_ptr< T[]>
static auto divide(const T *pBuf1, const T *pBuf2, const std::uint32_t uiCols, const std::uint32_t uiRows) -> std::unique_ptr< T[]>
static auto getStats(const T *pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows) -> std::unique_ptr< arc::gen4::image::stats_t >
static auto getRow(const T *pBuf, const std::uint32_t uiCol1, const std::uint32_t uiCol2, const std::uint32_t uiRow, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t &uiCount) -> std::unique_ptr< T[]>
static auto histogram(const T *pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t &uiCount) -> std::unique_ptr< std::uint32_t[]>
static auto countPixels(const T *pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows, const std::uint16_t uwValue) -> std::uint32_t
static auto getColArea(const T *pBuf, const std::uint32_t uiCol1, const std::uint32_t uiCol2, const std::uint32_t uiRow1, const std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t &uiCount) -> std::unique_ptr< double[]>
static auto containsValidRamp(const T *pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows) -> void
static auto getDiffStats(const T *pBuf1, const T *pBuf2, const std::uint32_t uiCol1, std::uint32_t uiCol2, const std::uint32_t uiRow1, std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows) -> std::unique_ptr< arc::gen4::image::difStats_t >
static auto containsValidArc420Synthetic(const T *pBuf, const std::uint16_t uwValue1=0x1234, const std::uint16_t uwValue2=0x6789) -> void
static auto fill(T *pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows, const T uiValue) -> void
static auto fill(T *pBuf, const std::size_t uiBytes, const T uiValue) -> void
static auto add(const T *pBuf1, const T *pBuf2, const std::uint32_t uiCols, const std::uint32_t uiRows) -> std::unique_ptr< std::uint64_t[]>
static auto subtractHalves(T *pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows) -> void
static auto getCol(const T *pBuf, const std::uint32_t uiCol, const std::uint32_t uiRow1, const std::uint32_t uiRow2, const std::uint32_t uiCols, std::uint32_t &uiCount) -> std::unique_ptr< T[]>
static auto getRowArea(const T *pBuf, const std::uint32_t uiCol1, const std::uint32_t uiCol2, const std::uint32_t uiRow1, const std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t &uiCount) -> std::unique_ptr< double[]>
static auto getDiffStats(const T *pBuf1, const T *pBuf2, const std::uint32_t uiCols, const std::uint32_t uiRows) -> std::unique_ptr< arc::gen4::image::difStats_t >
static auto copy(T *pDstBuf, const T *pSrcBuf, const std::size_t uiSize) -> void
static auto histogram(const T *pBuf, const std::uint32_t uiCol1, std::uint32_t uiCol2, const std::uint32_t uiRow1, std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows, std::uint32_t &uiCount) -> std::unique_ptr< std::uint32_t[]>
static auto getStats(std::vector< T * > vBufferList, const std::uint32_t uiChannelCount, const std::uint32_t uiCol1, const std::uint32_t uiCol2, const std::uint32_t uiRow1, const std::uint32_t uiRow2, const std::uint32_t uiCols, const std::uint32_t uiRows) -> std::unique_ptr< arc::gen4::image::avgStats_t >
static auto copy(T *pDstBuf, const T *pSrcBuf, const std::uint32_t uiCols, const std::uint32_t uiRows) -> void
static auto fillWithSmiley(T *pBuf, const std::uint32_t uiCols, const std::uint32_t uiRows) -> void
static auto containsValidArc440Synthetic(const T *pBuf, const std::uint32_t uiPixelsPerChannel, const std::uint32_t uiCols, const std::uint32_t uiRows) -> void
static auto countPixels(const T *pBuf, const std::size_t uiBufSize, const std::uint16_t uwValue) -> std::uint32_t
static auto maxTVal(void) -> std::uint32_t
static auto version(void) noexcept -> const std::string
std::uint32_t BPP_32
Definition: CArcImage.h:45
std::uint16_t BPP_16
Definition: CArcImage.h:39
Definition: CArcBase.h:50
std::unique_ptr< double[]> pAverageStdDev
Definition: CArcImage.h:65
std::uint32_t uiImageCount
Definition: CArcImage.h:72
avgStats_t(const std::uint32_t channelCount)
std::uint32_t uiChannelCount
Definition: CArcImage.h:71
std::unique_ptr< double[]> pAverageMean
Definition: CArcImage.h:64
std::unique_ptr< double[]> pAverageMax
Definition: CArcImage.h:63
std::unique_ptr< double[]> pAverageMin
Definition: CArcImage.h:62
const std::string toString(void) const noexcept
const std::string toString(void) const noexcept