| /* |
| * Copyright (C) 2011 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /////////////////////////////////////////////////// |
| // ImageUtils.h |
| // $Id: ImageUtils.h,v 1.9 2011/05/16 15:33:06 mbansal Exp $ |
| |
| #ifndef IMAGE_UTILS_H |
| #define IMAGE_UTILS_H |
| |
| #include <stdlib.h> |
| |
| /** |
| * Definition of basic image types |
| */ |
| typedef unsigned char ImageTypeBase; |
| typedef ImageTypeBase *ImageType; |
| |
| typedef short ImageTypeShortBase; |
| typedef ImageTypeShortBase *ImageTypeShort; |
| |
| typedef float ImageTypeFloatBase; |
| typedef ImageTypeFloatBase *ImageTypeFloat; |
| |
| |
| class ImageUtils { |
| public: |
| |
| /** |
| * Default number of channels in image. |
| */ |
| static const int IMAGE_TYPE_NUM_CHANNELS = 3; |
| |
| /** |
| * Definition of an empty image. |
| */ |
| static const int IMAGE_TYPE_NOIMAGE = NULL; |
| |
| /** |
| * Convert image from BGR (interlaced) to YVU (non-interlaced) |
| * |
| * Arguments: |
| * out: Resulting image (note must be preallocated before |
| * call) |
| * in: Input image |
| * width: Width of input image |
| * height: Height of input image |
| */ |
| static void rgb2yvu(ImageType out, ImageType in, int width, int height); |
| |
| static void rgba2yvu(ImageType out, ImageType in, int width, int height); |
| |
| /** |
| * Convert image from YVU (non-interlaced) to BGR (interlaced) |
| * |
| * Arguments: |
| * out: Resulting image (note must be preallocated before |
| * call) |
| * in: Input image |
| * width: Width of input image |
| * height: Height of input image |
| */ |
| static void yvu2rgb(ImageType out, ImageType in, int width, int height); |
| static void yvu2bgr(ImageType out, ImageType in, int width, int height); |
| |
| /** |
| * Convert image from BGR to grayscale |
| * |
| * Arguments: |
| * in: Input image |
| * width: Width of input image |
| * height: Height of input image |
| * |
| * Return: |
| * Pointer to resulting image (allocation is done here, free |
| * must be done by caller) |
| */ |
| static ImageType rgb2gray(ImageType in, int width, int height); |
| static ImageType rgb2gray(ImageType out, ImageType in, int width, int height); |
| |
| /** |
| * Read a binary PPM image |
| */ |
| static ImageType readBinaryPPM(const char *filename, int &width, int &height); |
| |
| /** |
| * Write a binary PPM image |
| */ |
| static void writeBinaryPPM(ImageType image, const char *filename, int width, int height, int numChannels = IMAGE_TYPE_NUM_CHANNELS); |
| |
| /** |
| * Allocate space for a standard image. |
| */ |
| static ImageType allocateImage(int width, int height, int numChannels, short int border = 0); |
| |
| /** |
| * Free memory of image |
| */ |
| static void freeImage(ImageType image); |
| |
| static ImageType *imageTypeToRowPointers(ImageType out, int width, int height); |
| /** |
| * Get time. |
| */ |
| static double getTime(); |
| |
| protected: |
| |
| /** |
| * Constants for YVU/RGB conversion |
| */ |
| static const int REDY = 257; |
| static const int REDV = 439; |
| static const int REDU = 148; |
| static const int GREENY = 504; |
| static const int GREENV = 368; |
| static const int GREENU = 291; |
| static const int BLUEY = 98; |
| static const int BLUEV = 71; |
| static const int BLUEU = 439; |
| |
| }; |
| |
| /** |
| * Structure containing an image and other bookkeeping items. |
| * Used in YUVinfo to store separate YVU image planes. |
| */ |
| typedef struct { |
| ImageType *ptr; |
| unsigned short width; |
| unsigned short height; |
| unsigned short border; |
| unsigned short pitch; |
| } BimageInfo; |
| |
| /** |
| * A YUV image container, |
| */ |
| class YUVinfo { |
| public: |
| static YUVinfo *allocateImage(unsigned short width, unsigned short height); |
| static void mapYUVInfoToImage(YUVinfo *img, unsigned char *position); |
| |
| /** |
| * Y Plane |
| */ |
| BimageInfo Y; |
| |
| /** |
| * V (1st color) plane |
| */ |
| BimageInfo V; |
| |
| /** |
| * U (1st color) plane |
| */ |
| BimageInfo U; |
| }; |
| |
| #endif |