10b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 20b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// Copyright 2006-2008 Adobe Systems Incorporated 30b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// All Rights Reserved. 40b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// 50b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// NOTICE: Adobe permits you to use, modify, and distribute this file in 60b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// accordance with the terms of the Adobe license agreement accompanying it. 70b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 80b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 90b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_image.h#1 $ */ 100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $DateTime: 2012/05/30 13:28:51 $ */ 110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Change: 832332 $ */ 120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Author: tknoll $ */ 130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/** \file 150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener * Support for working with image data in DNG SDK. 160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener */ 170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifndef __dng_image__ 210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define __dng_image__ 220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_assertions.h" 260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_classes.h" 270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_pixel_buffer.h" 280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_point.h" 290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_rect.h" 300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_tag_types.h" 310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_types.h" 320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief Class to get resource acquisition is instantiation behavior for tile 360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// buffers. Can be dirty or constant tile access. 370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_tile_buffer: public dng_pixel_buffer 390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_image &fImage; 440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void *fRefData; 460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Obtain a tile from an image. 500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param image Image tile will come from. 510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param tile Rectangle denoting extent of tile. 520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param dirty Flag indicating whether this is read-only or read-write acesss. 530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_tile_buffer (const dng_image &image, 550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &tile, 560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool dirty); 570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_tile_buffer (); 590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetRefData (void *refData) 630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener fRefData = refData; 650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void * GetRefData () const 680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fRefData; 700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener private: 730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Hidden copy constructor and assignment operator. 750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_tile_buffer (const dng_tile_buffer &buffer); 770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_tile_buffer & operator= (const dng_tile_buffer &buffer); 790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief Class to get resource acquisition is instantiation behavior for 850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// constant (read-only) tile buffers. 860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_const_tile_buffer: public dng_tile_buffer 880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Obtain a read-only tile from an image. 930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param image Image tile will come from. 940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param tile Rectangle denoting extent of tile. 950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_const_tile_buffer (const dng_image &image, 970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &tile); 980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_const_tile_buffer (); 1000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 1020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief Class to get resource acquisition is instantiation behavior for 1060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// dirty (writable) tile buffers. 1070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_dirty_tile_buffer: public dng_tile_buffer 1090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 1120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Obtain a writable tile from an image. 1140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param image Image tile will come from. 1150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param tile Rectangle denoting extent of tile. 1160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_dirty_tile_buffer (dng_image &image, 1180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &tile); 1190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_dirty_tile_buffer (); 1210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 1230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// \brief Base class for holding image data in DNG SDK. See dng_simple_image 1270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/// for derived class most often used in DNG SDK. 1280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerclass dng_image 1300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener friend class dng_tile_buffer; 1330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 1350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Bounds for this image. 1370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_rect fBounds; 1390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Number of image planes. 1410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fPlanes; 1430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Basic pixel type (TIFF tag type code). 1450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 fPixelType; 1470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 1490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// How to handle requests to get image areas outside the image bounds. 1510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener enum edge_option 1530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Leave edge pixels unchanged. 1560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener edge_none, 1580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Pad with zeros. 1600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener edge_zero, 1620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Repeat edge pixels. 1640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener edge_repeat, 1660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Repeat edge pixels, except for last plane which is zero padded. 1680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener edge_repeat_zero_last 1700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 1720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 1740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_image (const dng_rect &bounds, 1760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 planes, 1770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 pixelType); 1780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener public: 1800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual ~dng_image (); 1820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual dng_image * Clone () const; 1840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Getter method for bounds of an image. 1860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect & Bounds () const 1880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fBounds; 1900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Getter method for size of an image. 1930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener dng_point Size () const 1950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 1960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return Bounds ().Size (); 1970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 1980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Getter method for width of an image. 2000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 Width () const 2020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return Bounds ().W (); 2040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Getter method for height of an image. 2070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 Height () const 2090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return Bounds ().H (); 2110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Getter method for number of planes in an image. 2140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 Planes () const 2160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fPlanes; 2180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Getter for pixel type. 2210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \retval See dng_tagtypes.h . Valid values are ttByte, ttShort, ttSShort, 2220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// ttLong, ttFloat . 2230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 PixelType () const 2250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 2260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener return fPixelType; 2270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 2280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Setter for pixel type. 2300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param pixelType The new pixel type . 2310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void SetPixelType (uint32 pixelType); 2330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Getter for pixel size. 2350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \retval Size, in bytes, of pixel type for this image . 2360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 PixelSize () const; 2380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Getter for pixel range. 2400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// For unsigned types, range is 0 to return value. 2410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// For signed types, range is return value - 0x8000U. 2420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// For ttFloat type, pixel range is 0.0 to 1.0 and this routine returns 1. 2430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 PixelRange () const; 2450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Getter for best "tile stride" for accessing image. 2470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual dng_rect RepeatingTile () const; 2490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Get a pixel buffer of data on image with proper edge padding. 2510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param buffer Receives resulting pixel buffer. 2520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param edgeOption edge_option describing how to pad edges. 2530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param repeatV Amount of repeated padding needed in vertical for 2540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// edge_repeat and edge_repeat_zero_last edgeOption cases. 2550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param repeatH Amount of repeated padding needed in horizontal for 2560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// edge_repeat and edge_repeat_zero_last edgeOption cases. 2570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Get (dng_pixel_buffer &buffer, 2590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener edge_option edgeOption = edge_none, 2600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 repeatV = 1, 2610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 repeatH = 1) const; 2620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Put a pixel buffer into image. 2640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param buffer Pixel buffer to copy from. 2650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void Put (const dng_pixel_buffer &buffer); 2670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Shrink bounds of image to given rectangle. 2690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param r Rectangle to crop to. 2700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void Trim (const dng_rect &r); 2720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Rotate image to reflect given orientation change. 2740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param orientation Directive to rotate image in a certain way. 2750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void Rotate (const dng_orientation &orientation); 2770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Copy image data from an area of one image to same area of another. 2790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param src Image to copy from. 2800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param area Rectangle of images to copy. 2810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param srcPlane Plane to start copying in src. 2820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param dstPlane Plane to start copying in this. 2830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param planes Number of planes to copy. 2840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void CopyArea (const dng_image &src, 2860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &area, 2870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 srcPlane, 2880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 dstPlane, 2890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 planes); 2900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Copy image data from an area of one image to same area of another. 2920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param src Image to copy from. 2930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param area Rectangle of images to copy. 2940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param plane Plane to start copying in src and this. 2950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param planes Number of planes to copy. 2960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void CopyArea (const dng_image &src, 2980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &area, 2990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 plane, 3000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 planes) 3010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener CopyArea (src, area, plane, plane, planes); 3040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// Return true if the contents of an area of the image are the same as those of another. 3080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param rhs Image to compare against. 3090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param area Rectangle of image to test. 3100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param plane Plane to start comparing. 3110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener /// \param planes Number of planes to compare. 3120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool EqualArea (const dng_image &rhs, 3140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &area, 3150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 plane, 3160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 planes) const; 3170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener // Routines to set the entire image to a constant value. 3190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetConstant_uint8 (uint8 value, 3210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &area) 3220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener DNG_ASSERT (fPixelType == ttByte, "Mismatched pixel type"); 3250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener SetConstant ((uint32) value, area); 3270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetConstant_uint8 (uint8 value) 3310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener SetConstant (value, Bounds ()); 3330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetConstant_uint16 (uint16 value, 3360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &area) 3370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener DNG_ASSERT (fPixelType == ttShort, "Mismatched pixel type"); 3400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener SetConstant ((uint32) value, area); 3420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetConstant_uint16 (uint16 value) 3460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener SetConstant_uint16 (value, Bounds ()); 3480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetConstant_int16 (int16 value, 3510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &area) 3520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener DNG_ASSERT (fPixelType == ttSShort, "Mismatched pixel type"); 3550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener SetConstant ((uint32) (uint16) value, area); 3570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetConstant_int16 (int16 value) 3610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener SetConstant_int16 (value, Bounds ()); 3630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetConstant_uint32 (uint32 value, 3660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &area) 3670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener DNG_ASSERT (fPixelType == ttLong, "Mismatched pixel type"); 3700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener SetConstant (value, area); 3720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetConstant_uint32 (uint32 value) 3760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener SetConstant_uint32 (value, Bounds ()); 3780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetConstant_real32 (real32 value, 3810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &area) 3820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener DNG_ASSERT (fPixelType == ttFloat, "Mismatched pixel type"); 3850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener union 3870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 3880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener uint32 i; 3890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener real32 f; 3900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } x; 3910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener x.f = value; 3930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener SetConstant (x.i, area); 3950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 3970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 3980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void SetConstant_real32 (real32 value) 3990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener { 4000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener SetConstant_real32 (value, Bounds ()); 4010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener } 4020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void GetRepeat (dng_pixel_buffer &buffer, 4040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &srcArea, 4050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &dstArea) const; 4060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener protected: 4080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void AcquireTileBuffer (dng_tile_buffer &buffer, 4100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &area, 4110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener bool dirty) const; 4120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void ReleaseTileBuffer (dng_tile_buffer &buffer) const; 4140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void DoGet (dng_pixel_buffer &buffer) const; 4160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void DoPut (const dng_pixel_buffer &buffer); 4180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener void GetEdge (dng_pixel_buffer &buffer, 4200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener edge_option edgeOption, 4210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &srcArea, 4220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &dstArea) const; 4230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener virtual void SetConstant (uint32 value, 4250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener const dng_rect &area); 4260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener }; 4280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 4300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 4320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 4330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 434