1 /////////////////////////////////////////////////////////////////////////// 2 // 3 // Copyright (c) 2003, Industrial Light & Magic, a division of Lucas 4 // Digital Ltd. LLC 5 // 6 // All rights reserved. 7 // 8 // Redistribution and use in source and binary forms, with or without 9 // modification, are permitted provided that the following conditions are 10 // met: 11 // * Redistributions of source code must retain the above copyright 12 // notice, this list of conditions and the following disclaimer. 13 // * Redistributions in binary form must reproduce the above 14 // copyright notice, this list of conditions and the following disclaimer 15 // in the documentation and/or other materials provided with the 16 // distribution. 17 // * Neither the name of Industrial Light & Magic nor the names of 18 // its contributors may be used to endorse or promote products derived 19 // from this software without specific prior written permission. 20 // 21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 // 33 /////////////////////////////////////////////////////////////////////////// 34 35 36 #ifndef INCLUDED_IMF_PREVIEW_IMAGE_H 37 #define INCLUDED_IMF_PREVIEW_IMAGE_H 38 39 #include "ImfNamespace.h" 40 #include "ImfExport.h" 41 42 //----------------------------------------------------------------------------- 43 // 44 // class PreviewImage -- a usually small, low-dynamic range image, 45 // that is intended to be stored in an image file's header. 46 // 47 // struct PreviewRgba -- holds the value of a PreviewImage pixel. 48 // 49 //----------------------------------------------------------------------------- 50 51 52 OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER 53 54 55 struct IMF_EXPORT PreviewRgba 56 { 57 unsigned char r; // Red, green and blue components of 58 unsigned char g; // the pixel's color; intensity is 59 unsigned char b; // proportional to pow (x/255, 2.2), 60 // where x is r, g, or b. 61 62 unsigned char a; // The pixel's alpha; 0 == transparent, 63 // 255 == opaque. 64 65 PreviewRgba (unsigned char r = 0, 66 unsigned char g = 0, 67 unsigned char b = 0, 68 unsigned char a = 255) rPreviewRgba69 : r(r), g(g), b(b), a(a) {} 70 }; 71 72 73 class IMF_EXPORT PreviewImage 74 { 75 public: 76 77 //-------------------------------------------------------------------- 78 // Constructor: 79 // 80 // PreviewImage(w,h,p) constructs a preview image with w by h pixels 81 // whose initial values are specified in pixel array p. The x and y 82 // coordinates of the pixels in p go from 0 to w-1, and from 0 to h-1. 83 // The pixel with coordinates (x, y) is at address p + y*w + x. 84 // Pixel (0, 0) is in the upper left corner of the preview image. 85 // If p is zero, the pixels in the preview image are initialized with 86 // (r = 0, b = 0, g = 0, a = 255). 87 // 88 //-------------------------------------------------------------------- 89 90 PreviewImage (unsigned int width = 0, 91 unsigned int height = 0, 92 const PreviewRgba pixels[] = 0); 93 94 //----------------------------------------------------- 95 // Copy constructor, destructor and assignment operator 96 //----------------------------------------------------- 97 98 PreviewImage (const PreviewImage &other); 99 ~PreviewImage (); 100 101 PreviewImage & operator = (const PreviewImage &other); 102 103 104 //----------------------------------------------- 105 // Access to width, height and to the pixel array 106 //----------------------------------------------- 107 width()108 unsigned int width () const {return _width;} height()109 unsigned int height () const {return _height;} 110 pixels()111 PreviewRgba * pixels () {return _pixels;} pixels()112 const PreviewRgba * pixels () const {return _pixels;} 113 114 115 //---------------------------- 116 // Access to individual pixels 117 //---------------------------- 118 pixel(unsigned int x,unsigned int y)119 PreviewRgba & pixel (unsigned int x, unsigned int y) 120 {return _pixels[y * _width + x];} 121 pixel(unsigned int x,unsigned int y)122 const PreviewRgba & pixel (unsigned int x, unsigned int y) const 123 {return _pixels[y * _width + x];} 124 125 private: 126 127 unsigned int _width; 128 unsigned int _height; 129 PreviewRgba * _pixels; 130 }; 131 132 133 OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT 134 135 #endif 136