25 #include "ImageConvert.hh"
31 template <
class StorageType>
44 BIASERR(
"ImageConvert::ToPlanar() image already planar!");
46 BIASERR(
"ImageConvert::ToPlanar() not same image size");
54 res = ToPlanarRGB_(source,dest);
57 res = ToPlanarYUYV422_(source,dest);
60 BIASERR(
"conversion to planar only implemented for RGB, BGR and"
61 <<
" YUYV422 images!");
69 template <
class StorageType>
73 register StorageType* Red;
81 BIASGDOUT(D_MI_TOPLANAR,
"GetImageData() "<<dest.
GetImageData());
84 register const StorageType* ImageData = source.
GetImageData();
85 register const StorageType* ImageDataStop = ImageData +
89 while (ImageData < ImageDataStop) {
90 *Red++ = *ImageData++;
91 *Green++ = *ImageData++;
92 *Blue++ = *ImageData++;
102 BIASGDOUT(D_MI_TOPLANAR,
"GetImageData() "<<dest.
GetImageData());
107 template <
class StorageType>
113 BIASERR(
"ImageConvert::ToPlanar() only implemented for images with even with");
116 register const StorageType* ImageData = source.
GetImageData();
117 register const StorageType* ImageDataStop = ImageData + 2 * source.
GetPixelCount();
118 register StorageType *Y, *U, *V;
127 while (ImageData < ImageDataStop){
142 template <
class StorageType>
151 BIASERR(
"ImageConvert::FromInterleaved() does not make sense with one channel images");
153 BIASERR(
"ImageConvert::FromInterleaved() do not call with empty images");
155 BIASERR(
"ImageConvert::FromInterleaved() image is not interleaved");
159 res = FromInterleavedYUYV422_(source,Image1, Image2, Image3);
162 res = FromInterleavedRGB_(source,Image1, Image2, Image3);
165 BIASERR(
"ImageConvert::ToPlanar() color model not implemented");
172 template <
class StorageType>
179 unsigned int Width = source.
GetWidth();
180 unsigned int Height = source.
GetHeight();
187 BIASERR(
"FromInterleavedRGB_: wrong argument image size");
193 register const StorageType* ImageData = source.
GetImageData();
194 register const StorageType* ImageDataEnd = ImageData + source.
GetPixelCount() * 3;
195 while (ImageData < ImageDataEnd){
204 template <
class StorageType>
211 unsigned int Width = source.
GetWidth();
212 unsigned int Height = source.
GetHeight();
219 BIASERR(
"ImageConvert::FromInterleavedYUYV422 wrong argument image size");
225 register const StorageType* ImageData = source.
GetImageData();
226 register const StorageType* ImageDataEnd = ImageData + source.
GetPixelCount() * 2;
227 while (ImageData < ImageDataEnd){
YUYV422, 2 channels, full luminance Y, subsampled half U,V.
bool IsEmpty() const
check if ImageData_ points to allocated image buffer or not
static int ToPlanarYUYV422_(const Image< StorageType > &source, Image< StorageType > &dest)
static BIASImageBase_EXPORT int FromInterleaved(const Image< StorageType > &source, Image< StorageType > &Image1, Image< StorageType > &Image2, Image< StorageType > &Image3)
Extracts color planes to argument images without changing source.
static BIASImageBase_EXPORT int ToPlanar(const Image< StorageType > &source, Image< StorageType > &dest)
Converts the existing image to an planar version.
unsigned int GetWidth() const
void SetInterleaved(bool interleaved)
color values, 3 channels, order: blue,green,red
static int FromInterleavedRGB_(const Image< StorageType > &source, Image< StorageType > &R, Image< StorageType > &G, Image< StorageType > &B)
unsigned int GetChannelCount() const
returns the number of Color channels, e.g.
color values, 3 channels, order: red,green,blue
unsigned int GetHeight() const
The image template class for specific storage types.
bool SamePixelAndChannelCount(const ImageBase &Image) const
checks if data area has same "size" as Image of other type
void Init(unsigned int Width, unsigned int Height, unsigned int channels=1, enum EStorageType storageType=ST_unsignedchar, const bool interleaved=true)
calls Init from ImageBase storageType is ignored, just dummy argument
const StorageType * GetImageData() const
overloaded GetImageData() from ImageBase
enum EColorModel GetColorModel() const
static int ToPlanarRGB_(const Image< StorageType > &source, Image< StorageType > &dest)
void ReleaseImageDataPointer()
Releases ImageData_ (to be used together with RedirectImageDataPointer)
enum EStorageType GetStorageType() const
HSV, 3 channels, order: hue, sat , value.
static int FromInterleavedYUYV422_(const Image< StorageType > &source, Image< StorageType > &Y, Image< StorageType > &U, Image< StorageType > &V)
unsigned long int GetPixelCount() const
returns number of pixels in image
void RedirectImageDataPointer(void *data)
This method takes data and set the internal image data pointer to this.