<div dir="ltr">and how to get bytes per pixel<div><br></div><div>Best regards <br><br><div class="gmail_quote">On Wed, Dec 29, 2010 at 4:58 PM, Ali Habib <span dir="ltr">&lt;<a href="mailto:ali.mahmoud.habib@gmail.com">ali.mahmoud.habib@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div dir="ltr">I got it ,<div><br></div><div>but may I ask a question what&#39;s  the difference between  <span style="font-family:Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif;font-size:14px;border-collapse:collapse;line-height:18px;white-space:pre-wrap"><span style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;border-style:initial;border-color:initial;font-size:14px;vertical-align:baseline;background-color:transparent;color:black;background-repeat:initial initial">bitsPerComponent</span><span style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;border-style:initial;border-color:initial;font-size:14px;vertical-align:baseline;background-color:transparent;color:black;background-repeat:initial initial">, and </span></span><span style="font-family:Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif;font-size:14px;border-collapse:collapse;line-height:18px;white-space:pre-wrap"> </span></div>

<div><span style="font-family:Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif;font-size:14px;border-collapse:collapse;line-height:18px;white-space:pre-wrap">bitsPerPixel</span></div>

<div><span style="font-family:Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif;font-size:14px;border-collapse:collapse;line-height:18px;white-space:pre-wrap">I just get confused </span></div>

<div><span style="font-family:Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif;font-size:14px;border-collapse:collapse;line-height:18px;white-space:pre-wrap"><br>

</span></div><div><span style="font-family:Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif;font-size:14px;border-collapse:collapse;line-height:18px;white-space:pre-wrap">Best regards </span></div>
<div><div></div><div class="h5">
<div><span style="font-family:Consolas, Menlo, Monaco, &#39;Lucida Console&#39;, &#39;Liberation Mono&#39;, &#39;DejaVu Sans Mono&#39;, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, monospace, serif;font-size:14px;border-collapse:collapse;line-height:18px;white-space:pre-wrap"><br>

</span></div><div><br><div class="gmail_quote">On Wed, Dec 29, 2010 at 4:16 PM, Dan Mueller <span dir="ltr">&lt;<a href="mailto:dan.muel@gmail.com" target="_blank">dan.muel@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hi Ali,<br>
<br>
Option 1:<br>
<div>ImageType::Pointer image_1 = reader-&gt;GetOutput();<br>
</div>unsigned int numComponents = image_1-&gt;GetNumberOfComponentsPerPixel();<br>
// NOTE: Only really works for itk::Vector images eg. RGBPixel returns 1<br>
<br>
Option 2:<br>
<div>ImageType::Pointer image_1 = reader-&gt;GetOutput();<br>
</div><div>InputImageType::IndexType index;<br>
index[0]=1;<br>
index[1]=1;<br>
</div>ImageType::PixelType pixel_value= image_1-&gt;GetPixel( index );<br>
unsigned int numComponents =<br>
itk::VectorPixelTraits&lt;ImageType::PixelType&gt;::GetNumberOfComponents(pixel_value);<br>
// NOTE: This works for many image types. eg.<br>
// unsigned char returns 1<br>
// RGB returns 3<br>
// FixedArray&lt;float, 4&gt; returns 4<br>
<br>
HTH<br>
<br>
Cheers, Dan<br>
<div><div></div><div><br>
On 29 December 2010 11:17, Ali Habib &lt;<a href="mailto:ali.mahmoud.habib@gmail.com" target="_blank">ali.mahmoud.habib@gmail.com</a>&gt; wrote:<br>
&gt; Sorry for disturbance,<br>
&gt; but I have<br>
&gt; ImageType::Pointer image_1 = reader-&gt;GetOutput() ;<br>
&gt; I misunderstand how to get the pixel type of  image_1 , using the 2 options<br>
&gt; you gave me . could u give me more details<br>
&gt; Best regards<br>
&gt;<br>
&gt; On Tue, Dec 28, 2010 at 11:26 AM, Dan Mueller &lt;<a href="mailto:dan.muel@gmail.com" target="_blank">dan.muel@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi Ali,<br>
&gt;&gt;<br>
&gt;&gt; Try the following to get the image buffer as a pointer:<br>
&gt;&gt;    InputPixelType* buffer = image_1-&gt;GetBufferPointer();<br>
&gt;&gt;<br>
&gt;&gt; You can then treat the buffer as a simple pointer (e.g. cast to<br>
&gt;&gt; unsigned char *, whatever).<br>
&gt;&gt;<br>
&gt;&gt; Determining if the pixel type is scalar or not is a little trickier.<br>
&gt;&gt; At first glance the method<br>
&gt;&gt; itk::ImageBase::GetNumberOfComponentsPerPixel() seems helpful, but it<br>
&gt;&gt; does not work as you might expect (see documentation). I&#39;m not sure if<br>
&gt;&gt; there is a better way, but I use a specialized traits class to help<br>
&gt;&gt; (see below). You use the class as follows:<br>
&gt;&gt;    InputPixelType pixel;<br>
&gt;&gt;    unsigned int numComponents =<br>
&gt;&gt; itk::VectorPixelTraits&lt;InputPixelType&gt;::GetNumberOfComponents(pixel);<br>
&gt;&gt;<br>
&gt;&gt; HTH<br>
&gt;&gt;<br>
&gt;&gt; Cheers, Dan<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; /*=========================================================================<br>
&gt;&gt;<br>
&gt;&gt;  Program:   Insight Segmentation &amp; Registration Toolkit<br>
&gt;&gt;  Module:    $RCSfile: itkVectorPixelTraits.h,v $<br>
&gt;&gt;  Language:  C++<br>
&gt;&gt;  Date:      $Date$<br>
&gt;&gt;  Version:   $Revision$<br>
&gt;&gt;<br>
&gt;&gt;  Copyright (c) Insight Software Consortium. All rights reserved.<br>
&gt;&gt;  See ITKCopyright.txt or <a href="http://www.itk.org/HTML/Copyright.htm" target="_blank">http://www.itk.org/HTML/Copyright.htm</a> for<br>
&gt;&gt; details.<br>
&gt;&gt;<br>
&gt;&gt;     This software is distributed WITHOUT ANY WARRANTY; without even<br>
&gt;&gt;     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR<br>
&gt;&gt;     PURPOSE.  See the above copyright notices for more information.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; =========================================================================*/<br>
&gt;&gt; #ifndef __itkVectorPixelTraits_h<br>
&gt;&gt; #define __itkVectorPixelTraits_h<br>
&gt;&gt;<br>
&gt;&gt; #include &quot;itkMacro.h&quot;<br>
&gt;&gt; #include &quot;itkArray.h&quot;<br>
&gt;&gt; #include &quot;itkVector.h&quot;<br>
&gt;&gt; #include &quot;itkFixedArray.h&quot;<br>
&gt;&gt; #include &quot;itkRGBPixel.h&quot;<br>
&gt;&gt; #include &quot;itkRGBAPixel.h&quot;<br>
&gt;&gt; #include &quot;itkVariableLengthVector.h&quot;<br>
&gt;&gt; #include &quot;itkNumericTraits.h&quot;<br>
&gt;&gt;<br>
&gt;&gt; namespace itk<br>
&gt;&gt; {<br>
&gt;&gt;<br>
&gt;&gt; /** \class VectorPixelTraits<br>
&gt;&gt;  * \brief Define additional traits for vector pixels (eg. fixed array,<br>
&gt;&gt; RGB).<br>
&gt;&gt;  *<br>
&gt;&gt;  * VectorPixelTraits is used to extend the traits associated with vector<br>
&gt;&gt; pixel<br>
&gt;&gt;  * types such as fixed array, RGBPixel, VariableLengthVector, and so on.<br>
&gt;&gt;  * These traits also support scalar types (such as unsigned char, short)<br>
&gt;&gt;  * so that both vector and scalar types can be treated in a unified way.<br>
&gt;&gt;  *<br>
&gt;&gt;  * Note this default implementation defines traits for all scalar types<br>
&gt;&gt;  * (eg. unsigned char, short, double, etc).<br>
&gt;&gt;  *<br>
&gt;&gt;  * \ingroup DataRepresentation<br>
&gt;&gt;  */<br>
&gt;&gt; template &lt;class T&gt;<br>
&gt;&gt; class VectorPixelTraits {<br>
&gt;&gt; public:<br>
&gt;&gt;  /** Get the number of components for the given type.<br>
&gt;&gt;    * An input is required for variable length types whose<br>
&gt;&gt;    * length is defined at run-time rather than compile-time.<br>
&gt;&gt;    * For other types the input is simply ignored. */<br>
&gt;&gt;  static unsigned int GetNumberOfComponents( T input ) { return 1; }<br>
&gt;&gt;<br>
&gt;&gt;  /* Return the reference to the given indexed element in the vector. */<br>
&gt;&gt;  static T *GetElement( unsigned int i, T *pixel ) { return pixel; }<br>
&gt;&gt;<br>
&gt;&gt;  /* Set the value of the left element with the value of the right. */<br>
&gt;&gt;  static void SetElement( unsigned int i, T &amp;left, T right ) { left =<br>
&gt;&gt; right; }<br>
&gt;&gt;<br>
&gt;&gt;  /* Return the zero value. */<br>
&gt;&gt;  static T ZeroValue( T input ) { return NumericTraits&lt;T&gt;::ZeroValue(); }<br>
&gt;&gt;<br>
&gt;&gt;  /* Convert the given double to the pixel type.<br>
&gt;&gt;     NOTE: This is not implemented for VariableLengthVectors! */<br>
&gt;&gt;  static T Convert( double input ) { return static_cast&lt;T&gt;(input); }<br>
&gt;&gt; };<br>
&gt;&gt;<br>
&gt;&gt; /** Define a macro to be used for RGB types. */<br>
&gt;&gt; #define RGBSTATICTRAITSMACRO( T, E ) \<br>
&gt;&gt; template&lt;&gt; \<br>
&gt;&gt; class VectorPixelTraits&lt; T&lt;E&gt; &gt; { \<br>
&gt;&gt; public: \<br>
&gt;&gt;  static unsigned int GetNumberOfComponents( T&lt;E&gt; input ) \<br>
&gt;&gt;    { return 3; } \<br>
&gt;&gt;  static E *GetElement( unsigned int i, T&lt;E&gt; *pixel ) \<br>
&gt;&gt;    { return &amp;((*pixel)[i]); } \<br>
&gt;&gt;  static void SetElement( unsigned int i, T&lt;E&gt; &amp;left, T&lt;E&gt; right ) \<br>
&gt;&gt;    { left[i] = right[i]; } \<br>
&gt;&gt;  static T&lt;E&gt; ZeroValue( T&lt;E&gt; input ) \<br>
&gt;&gt;    { return NumericTraits&lt;T&lt;E&gt;&gt;::ZeroValue(); } \<br>
&gt;&gt;  static T&lt;E&gt; Convert( double input ) \<br>
&gt;&gt;    { T&lt;E&gt; value( static_cast&lt;E&gt;(input) ); return value; } \<br>
&gt;&gt; }; \<br>
&gt;&gt;<br>
&gt;&gt; RGBSTATICTRAITSMACRO( RGBPixel, unsigned char );<br>
&gt;&gt; RGBSTATICTRAITSMACRO( RGBPixel, signed char );<br>
&gt;&gt; RGBSTATICTRAITSMACRO( RGBPixel, unsigned short );<br>
&gt;&gt; RGBSTATICTRAITSMACRO( RGBPixel, signed short );<br>
&gt;&gt; RGBSTATICTRAITSMACRO( RGBPixel, unsigned long );<br>
&gt;&gt; RGBSTATICTRAITSMACRO( RGBPixel, signed long );<br>
&gt;&gt; RGBSTATICTRAITSMACRO( RGBPixel, float );<br>
&gt;&gt; RGBSTATICTRAITSMACRO( RGBPixel, double );<br>
&gt;&gt;<br>
&gt;&gt; /** Define a macro to be used for RGBA types. */<br>
&gt;&gt; #define RGBASTATICTRAITSMACRO( T, E ) \<br>
&gt;&gt; template&lt;&gt; \<br>
&gt;&gt; class VectorPixelTraits&lt; T&lt;E&gt; &gt; { \<br>
&gt;&gt; public: \<br>
&gt;&gt;  static unsigned int GetNumberOfComponents( T&lt;E&gt; input ) { return 4; } \<br>
&gt;&gt;  static E *GetElement( unsigned int i, T&lt;E&gt; *pixel ) { return<br>
&gt;&gt; &amp;((*pixel)[i]); } \<br>
&gt;&gt;  static void SetElement( unsigned int i, T&lt;E&gt; &amp;left, T&lt;E&gt; right ) {<br>
&gt;&gt; left[i] = right[i]; } \<br>
&gt;&gt;  static T&lt;E&gt; ZeroValue( T&lt;E&gt; input ) { T&lt;E&gt; zero =<br>
&gt;&gt; NumericTraits&lt;T&lt;E&gt;&gt;::ZeroValue(); zero.SetAlpha( 254 ); return zero; }<br>
&gt;&gt; \<br>
&gt;&gt;  static T&lt;E&gt; Convert( double input ) { T&lt;E&gt; value(<br>
&gt;&gt; static_cast&lt;E&gt;(input) ); return value; } \<br>
&gt;&gt; }; \<br>
&gt;&gt;<br>
&gt;&gt; RGBASTATICTRAITSMACRO( RGBAPixel, unsigned char );<br>
&gt;&gt; RGBASTATICTRAITSMACRO( RGBAPixel, signed char );<br>
&gt;&gt; RGBASTATICTRAITSMACRO( RGBAPixel, unsigned short );<br>
&gt;&gt; RGBASTATICTRAITSMACRO( RGBAPixel, signed short );<br>
&gt;&gt; RGBASTATICTRAITSMACRO( RGBAPixel, unsigned long );<br>
&gt;&gt; RGBASTATICTRAITSMACRO( RGBAPixel, signed long );<br>
&gt;&gt; RGBASTATICTRAITSMACRO( RGBAPixel, float );<br>
&gt;&gt; RGBASTATICTRAITSMACRO( RGBAPixel, double );<br>
&gt;&gt;<br>
&gt;&gt; /** Define a macro to be used for all (fixed) array types. */<br>
&gt;&gt; #define FIXEDARRAYSTATICTRAITSMACRO( T, E, N ) \<br>
&gt;&gt; template&lt;&gt; \<br>
&gt;&gt; class VectorPixelTraits&lt; T&lt;E,N&gt; &gt; { \<br>
&gt;&gt; public: \<br>
&gt;&gt;  static unsigned int GetNumberOfComponents(T&lt;E,N&gt; input) { return N; } \<br>
&gt;&gt;  static E *GetElement( unsigned int i, T&lt;E,N&gt; *pixel) { return<br>
&gt;&gt; &amp;((*pixel)[i]); } \<br>
&gt;&gt;  static void SetElement( unsigned int i, T&lt;E,N&gt; &amp;left, T&lt;E,N&gt; right)<br>
&gt;&gt; { left[i] = right[i]; } \<br>
&gt;&gt;  static T&lt;E,N&gt; ZeroValue( T&lt;E,N&gt; input ) { T&lt;E,N&gt; zero; zero.Fill(<br>
&gt;&gt; NumericTraits&lt;E&gt;::ZeroValue() ); return zero; } \<br>
&gt;&gt;  static T&lt;E,N&gt; Convert( double input ) { T&lt;E,N&gt; value; value.Fill(<br>
&gt;&gt; static_cast&lt;E&gt;(input) ); return value; } \<br>
&gt;&gt; }; \<br>
&gt;&gt;<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, unsigned char, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, signed char, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, unsigned short, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, signed short, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, unsigned long, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, signed long, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, float, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, double, 1 );<br>
&gt;&gt;<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, unsigned char, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, signed char, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, unsigned short, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, signed short, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, unsigned long, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, signed long, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, float, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, double, 2 );<br>
&gt;&gt;<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, unsigned char, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, signed char, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, unsigned short, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, signed short, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, unsigned long, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, signed long, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, float, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, double, 3 );<br>
&gt;&gt;<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, unsigned char, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, signed char, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, unsigned short, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, signed short, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, unsigned long, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, signed long, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, float, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( FixedArray, double, 4 );<br>
&gt;&gt;<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, unsigned char, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, signed char, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, unsigned short, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, signed short, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, unsigned long, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, signed long, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, float, 1 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, double, 1 );<br>
&gt;&gt;<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, unsigned char, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, signed char, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, unsigned short, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, signed short, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, unsigned long, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, signed long, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, float, 2 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, double, 2 );<br>
&gt;&gt;<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, unsigned char, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, signed char, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, unsigned short, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, signed short, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, unsigned long, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, signed long, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, float, 3 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, double, 3 );<br>
&gt;&gt;<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, unsigned char, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, signed char, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, unsigned short, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, signed short, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, unsigned long, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, signed long, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, float, 4 );<br>
&gt;&gt; FIXEDARRAYSTATICTRAITSMACRO( Vector, double, 4 );<br>
&gt;&gt;<br>
&gt;&gt; /** Define a macro to be used for all (variable) array types. */<br>
&gt;&gt; #define VARIABLEARRAYSTATICTRAITSMACRO( T, E ) \<br>
&gt;&gt; template&lt;&gt; \<br>
&gt;&gt; class VectorPixelTraits&lt; T&lt;E&gt; &gt; { \<br>
&gt;&gt; public: \<br>
&gt;&gt;  static unsigned int GetNumberOfComponents(T&lt;E&gt; input) { return<br>
&gt;&gt; input.Size(); } \<br>
&gt;&gt;  static E *GetElement( unsigned int i, T&lt;E&gt; *pixel) { return<br>
&gt;&gt; &amp;((*pixel)[i]); } \<br>
&gt;&gt;  static void SetElement( unsigned int i, T&lt;E&gt; &amp;left, T&lt;E&gt; right) {<br>
&gt;&gt; left[i] = right[i]; } \<br>
&gt;&gt;  static T&lt;E&gt; ZeroValue( T&lt;E&gt; input ) { return<br>
&gt;&gt; NumericTraits&lt;T&lt;E&gt;&gt;::Zero(input); } \<br>
&gt;&gt;  static T&lt;E&gt; Convert( double input ) { T&lt;E&gt; value; /* NOT IMPLEMENTED<br>
&gt;&gt; */ return value; } \<br>
&gt;&gt; }; \<br>
&gt;&gt;<br>
&gt;&gt; VARIABLEARRAYSTATICTRAITSMACRO( VariableLengthVector, unsigned char );<br>
&gt;&gt; VARIABLEARRAYSTATICTRAITSMACRO( VariableLengthVector, signed char );<br>
&gt;&gt; VARIABLEARRAYSTATICTRAITSMACRO( VariableLengthVector, unsigned short );<br>
&gt;&gt; VARIABLEARRAYSTATICTRAITSMACRO( VariableLengthVector, signed short );<br>
&gt;&gt; VARIABLEARRAYSTATICTRAITSMACRO( VariableLengthVector, unsigned long );<br>
&gt;&gt; VARIABLEARRAYSTATICTRAITSMACRO( VariableLengthVector, signed long );<br>
&gt;&gt; VARIABLEARRAYSTATICTRAITSMACRO( VariableLengthVector, float );<br>
&gt;&gt; VARIABLEARRAYSTATICTRAITSMACRO( VariableLengthVector, double );<br>
&gt;&gt;<br>
&gt;&gt; } // end namespace itk<br>
&gt;&gt;<br>
&gt;&gt; #endif<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On 28 December 2010 09:52, Ali Habib &lt;<a href="mailto:ali.mahmoud.habib@gmail.com" target="_blank">ali.mahmoud.habib@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; Dear All,<br>
&gt;&gt; &gt; I need the pixel data as unsigned char* , I created my pipeline but I<br>
&gt;&gt; &gt; stuck<br>
&gt;&gt; &gt; on how to get the buffer data , also I need to know does the pixel_value<br>
&gt;&gt; &gt; will show me if the input is scaler or not<br>
&gt;&gt; &gt; the code I use is :<br>
&gt;&gt; &gt; typedef signed short InputPixelType;<br>
&gt;&gt; &gt; const unsigned int   InputDimension = 2;<br>
&gt;&gt; &gt; typedef itk::Image&lt; InputPixelType, InputDimension &gt; InputImageType;<br>
&gt;&gt; &gt; typedef itk::ImageFileReader&lt; InputImageType &gt; ReaderType;<br>
&gt;&gt; &gt; typedef InputImageType::SizeType         SizeType;<br>
&gt;&gt; &gt; ReaderType::Pointer reader = ReaderType::New();<br>
&gt;&gt; &gt; reader-&gt;SetFileName( &quot;4.dcm&quot; );<br>
&gt;&gt; &gt; typedef itk::GDCMImageIO           ImageIOType;<br>
&gt;&gt; &gt; ImageIOType::Pointer gdcmImageIO = ImageIOType::New();<br>
&gt;&gt; &gt; reader-&gt;SetImageIO( gdcmImageIO );<br>
&gt;&gt; &gt; try<br>
&gt;&gt; &gt;     {<br>
&gt;&gt; &gt; reader-&gt;Update();<br>
&gt;&gt; &gt;     }<br>
&gt;&gt; &gt; catch (itk::ExceptionObject &amp; e)<br>
&gt;&gt; &gt;     {<br>
&gt;&gt; &gt; std::cerr &lt;&lt; &quot;exception in file reader &quot; &lt;&lt; std::endl;<br>
&gt;&gt; &gt; std::cerr &lt;&lt; e &lt;&lt; std::endl;<br>
&gt;&gt; &gt; //          return EXIT_FAILURE;<br>
&gt;&gt; &gt;     }<br>
&gt;&gt; &gt; InputImageType::Pointer image_1 = reader-&gt;GetOutput() ;<br>
&gt;&gt; &gt; // the image parameters<br>
&gt;&gt; &gt; unsigned long lwidth = image_1-&gt;GetLargestPossibleRegion().GetSize()[0]<br>
&gt;&gt; &gt; ;<br>
&gt;&gt; &gt; unsigned long lheight = image_1-&gt;GetLargestPossibleRegion().GetSize()[1]<br>
&gt;&gt; &gt; ;<br>
&gt;&gt; &gt; InputImageType::IndexType index;<br>
&gt;&gt; &gt; index[0]=1;<br>
&gt;&gt; &gt; index[1]=1;<br>
&gt;&gt; &gt; signed short pixel_value;<br>
&gt;&gt; &gt; pixel_value= image_1-&gt;GetPixel( index );<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br></div></div></div></div>
</blockquote></div><br></div></div>