ImagePixelFormats.h

Go to the documentation of this file.
00001 /*
00002 *       This file contains structures for simple reading and writing from/to raw image data.
00003 *
00004 *       Author:
00005 *                       Tomas Mrkvicka
00006 *                       xmrkvi03@stud.fit.vutbr.cz
00007 *
00008 */
00009 
00010 #include <windows.h>
00011 
00012 //FORWARD DECLARATIONS
00013 namespace NSPipeline
00014 {
00015         struct TPF_ARGB;
00016         struct TPF_RGB;
00017 };
00018 
00019 #ifndef _PIPELINE_IMAGEPIXELFORMATS_HH_
00020 #define _PIPELINE_IMAGEPIXELFORMATS_HH_
00021 
00022 #include "pipeline/CriticalSection.h"
00023 #include "pipeline/TimeStamp.h"
00024 
00025 namespace NSPipeline
00026 {
00027 
00028 // Vsechny struktury jsou vnitrne zarovnany na 1 bajt
00029 #pragma pack(1)
00030 
00031 ////////////////////////////////////////////////////////////////////////////////
00032 ////////////////////////////////////////////////////////////////////////////////
00033 ////////////////////////////////////////////////////////////////////////////////
00034 // TPF_ARGB
00035 
00036 /** Barevny format - 32bitu - ARGB.
00037 *
00038 *       Pixel je reprezentovan jako DWORD 0xAARRGGBB.
00039 *
00040 *       V pameti jsou (pro little-endian) ulozeny bajtu v tomto poradi BLUE, GREEN, RED, ALPHA.
00041 *
00042 *       \note   Struktura je zarovnana na 1 byte, takze je zajistena shodna velikost s DWORD (32-bitu).
00043 */
00044 struct TPF_ARGB
00045 {
00046 //PUBLIC METHODS
00047 public:
00048                                 TPF_ARGB( BYTE alpha, BYTE red, BYTE  green, BYTE blue);
00049 
00050         void            SetAlpha( BYTE alpha );
00051         void            SetRed( BYTE red );
00052         void            SetGreen( BYTE green );
00053         void            SetBlue( BYTE blue );
00054 
00055         BYTE            GetAlpha(void) const;
00056         BYTE            GetRed(void) const;
00057         BYTE            GetGreen(void) const;
00058         BYTE            GetBlue(void) const;
00059 //PUBLIC COMPONENTS
00060 public:
00061         DWORD           m_pixel;
00062 };
00063 //OK 2007-08-24 22:27:16 B04-315B\Tom
00064 
00065 /** Vytvori pixel ze zadanych barevnych slozek
00066 *
00067 *       \param  alpha   [in] alpha kanal - 8 bitu
00068 *       \param  red             [in] cerveny kanal - 8 bitu
00069 *       \param  green   [in] zeleny kanal - 8 bitu
00070 *       \param  blue    [in] modry kanal - 8 bitu
00071 */
00072 inline TPF_ARGB::TPF_ARGB( BYTE alpha, BYTE red, BYTE  green, BYTE blue)
00073 {
00074         m_pixel =
00075                 (       ( (DWORD)alpha  )       << 24   ) |
00076                 (       ( (DWORD)red    )       << 16   ) |
00077                 (       ( (DWORD)green  )       << 8    ) |
00078                 (       ( (DWORD)blue   )                       );
00079 }
00080 //OK 2007-08-24 22:27:26 B04-315B\Tom
00081 
00082 /** Nastaveni alpha kanalu.
00083 *
00084 *       \param  alpha   [in] nova hodnota alpha kanalu
00085 */
00086 inline void TPF_ARGB::SetAlpha( BYTE alpha )
00087 {
00088         m_pixel = ( ( (DWORD)alpha ) << 24 ) | m_pixel;
00089 }
00090 //OK 2007-08-24 22:27:28 B04-315B\Tom
00091 
00092 /** Nastaveni cerveneho kanalu.
00093 *
00094 *       \param  red     [in] nova hodnota cerveneho kanalu
00095 */
00096 inline void TPF_ARGB::SetRed( BYTE red )
00097 {
00098         m_pixel = ( ( (DWORD)red ) << 16 ) | m_pixel;
00099 }
00100 //OK 2007-08-24 22:28:16 B04-315B\Tom
00101 
00102 /** Nastaveni zeleneho kanalu.
00103 *
00104 *       \param  green   [in] nova hodnota zeleneho kanalu
00105 */
00106 inline void TPF_ARGB::SetGreen( BYTE green )
00107 {
00108         m_pixel = ( ( (DWORD)green ) << 8 ) | m_pixel;
00109 }
00110 //OK 2007-08-24 22:28:19 B04-315B\Tom
00111 
00112 /** Nastaveni modreho kanalu.
00113 *
00114 *       \param  blue    [in] nova hodnota modreho kanalu
00115 */
00116 inline void TPF_ARGB::SetBlue( BYTE blue )
00117 {
00118         m_pixel = ( (DWORD)blue ) | m_pixel;
00119 }
00120 //OK 2007-08-24 22:28:22 B04-315B\Tom
00121 
00122 /** Vrati hodnotu alpha kanalu.
00123 */
00124 inline BYTE TPF_ARGB::GetAlpha(void) const
00125 {
00126         return (BYTE)( ( m_pixel >> 24 ) & 0xff );
00127 }
00128 //OK 2007-08-24 22:28:27 B04-315B\Tom
00129 
00130 /** Vrati hodnotu cerveneho kanalu.
00131 */
00132 inline BYTE TPF_ARGB::GetRed(void) const
00133 {
00134         return (BYTE)( ( m_pixel >> 16 ) & 0xff );
00135 }
00136 //OK 2007-08-24 22:28:29 B04-315B\Tom
00137 
00138 /** Vrati hodnotu zeleneho kanalu.
00139 */
00140 inline BYTE TPF_ARGB::GetGreen(void) const
00141 {
00142         return (BYTE)( ( m_pixel >> 8 ) & 0xff );
00143 }
00144 //OK 2007-08-24 22:28:32 B04-315B\Tom
00145 
00146 /** Vrati hodnotu modreho kanalu.
00147 */
00148 inline BYTE TPF_ARGB::GetBlue(void) const
00149 {
00150         return (BYTE)( m_pixel & 0xff );
00151 }
00152 //OK 2007-08-24 22:28:34 B04-315B\Tom
00153 
00154 // TPF_ARGB
00155 ////////////////////////////////////////////////////////////////////////////////
00156 ////////////////////////////////////////////////////////////////////////////////
00157 ////////////////////////////////////////////////////////////////////////////////
00158 // TPF_RGB
00159 
00160 /** Barevny format - 24bitu - RGB.
00161 *
00162 *       V pameti jsou (pro little-endian) ulozeny bajtu v tomto poradi BLUE, GREEN, RED.
00163 *
00164 *       \note   Struktura je zarovnana na 1 byte, takze je zajistena shodna velikost s 24 bity.
00165 */
00166 struct TPF_RGB
00167 {
00168 //PUBLIC METHODS
00169 public:
00170                                 TPF_RGB( BYTE red, BYTE  green, BYTE blue);
00171         
00172         void            SetRed( BYTE red );
00173         void            SetGreen( BYTE green );
00174         void            SetBlue( BYTE blue );
00175         
00176         BYTE            GetRed(void) const;
00177         BYTE            GetGreen(void) const;
00178         BYTE            GetBlue(void) const;
00179 //PUBLIC COMPONENTS
00180 public:
00181         BYTE            m_blue;
00182         BYTE            m_green;
00183         BYTE            m_red;
00184 };
00185 //OK 2007-09-04 11:56:37 B04-315B\Tom
00186 
00187 /** Vytvori pixel ze zadanych barevnych slozek
00188 *
00189 *       \param  red             [in] cerveny kanal - 8 bitu
00190 *       \param  green   [in] zeleny kanal - 8 bitu
00191 *       \param  blue    [in] modry kanal - 8 bitu
00192 */
00193 inline TPF_RGB::TPF_RGB( BYTE red, BYTE  green, BYTE blue)
00194 {
00195         m_blue  = blue;
00196         m_green = green;
00197         m_red   = red;
00198 }
00199 //OK 2007-09-04 11:57:45 B04-315B\Tom
00200 
00201 /** Nastaveni cerveneho kanalu.
00202 *
00203 *       \param  red     [in] nova hodnota cerveneho kanalu
00204 */
00205 inline void TPF_RGB::SetRed( BYTE red )
00206 {
00207         m_red = red;
00208 }
00209 //OK 2007-09-04 11:58:06 B04-315B\Tom
00210 
00211 /** Nastaveni zeleneho kanalu.
00212 *
00213 *       \param  green   [in] nova hodnota zeleneho kanalu
00214 */
00215 inline void TPF_RGB::SetGreen( BYTE green )
00216 {
00217         m_green = green;
00218 }
00219 //OK 2007-09-04 11:58:20 B04-315B\Tom
00220 
00221 /** Nastaveni modreho kanalu.
00222 *
00223 *       \param  blue    [in] nova hodnota modreho kanalu
00224 */
00225 inline void TPF_RGB::SetBlue( BYTE blue )
00226 {
00227         m_blue = blue;
00228 }
00229 //OK 2007-09-04 11:58:33 B04-315B\Tom
00230 
00231 /** Vrati hodnotu cerveneho kanalu.
00232 */
00233 inline BYTE TPF_RGB::GetRed(void) const
00234 {
00235         return m_red;
00236 }
00237 //OK 2007-09-04 11:58:43 B04-315B\Tom
00238 
00239 /** Vrati hodnotu zeleneho kanalu.
00240 */
00241 inline BYTE TPF_RGB::GetGreen(void) const
00242 {
00243         return m_green;
00244 }
00245 //OK 2007-09-04 11:58:58 B04-315B\Tom
00246 
00247 /** Vrati hodnotu modreho kanalu.
00248 */
00249 inline BYTE TPF_RGB::GetBlue(void) const
00250 {
00251         return m_blue;
00252 }
00253 //OK 2007-09-04 11:59:21 B04-315B\Tom
00254 
00255 // TPF_RGB
00256 ////////////////////////////////////////////////////////////////////////////////
00257 ////////////////////////////////////////////////////////////////////////////////
00258 ////////////////////////////////////////////////////////////////////////////////
00259 
00260 #pragma pack()
00261 
00262 }; //END of NSPipeline
00263 using namespace NSPipeline;
00264 
00265 #endif

Generated on Sat Nov 17 16:23:26 2007 for Image Processing Pipeline by  doxygen 1.4.6-NO