1/* 2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 3% % 4% % 5% % 6% H H AAA L DDDD % 7% H H A A L D D % 8% HHHHH AAAAA L D D % 9% H H A A L D D % 10% H H A A LLLLL DDDD % 11% % 12% % 13% Create Identity Hald CLUT Image Format % 14% % 15% Software Design % 16% Cristy % 17% July 1992 % 18% % 19% % 20% Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization % 21% dedicated to making software imaging solutions freely available. % 22% % 23% You may not use this file except in compliance with the License. You may % 24% obtain a copy of the License at % 25% % 26% http://www.imagemagick.org/script/license.php % 27% % 28% Unless required by applicable law or agreed to in writing, software % 29% distributed under the License is distributed on an "AS IS" BASIS, % 30% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % 31% See the License for the specific language governing permissions and % 32% limitations under the License. % 33% % 34%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 35% 36% 37*/ 38 39/* 40 Include declarations. 41*/ 42#include "MagickCore/studio.h" 43#include "MagickCore/blob.h" 44#include "MagickCore/blob-private.h" 45#include "MagickCore/cache.h" 46#include "MagickCore/colorspace.h" 47#include "MagickCore/exception.h" 48#include "MagickCore/exception-private.h" 49#include "MagickCore/image.h" 50#include "MagickCore/image-private.h" 51#include "MagickCore/list.h" 52#include "MagickCore/magick.h" 53#include "MagickCore/memory_.h" 54#include "MagickCore/module.h" 55#include "MagickCore/monitor.h" 56#include "MagickCore/monitor-private.h" 57#include "MagickCore/pixel-accessor.h" 58#include "MagickCore/quantum-private.h" 59#include "MagickCore/resource_.h" 60#include "MagickCore/static.h" 61#include "MagickCore/string_.h" 62#include "MagickCore/string-private.h" 63#include "MagickCore/thread-private.h" 64 65/* 66%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 67% % 68% % 69% % 70% R e a d H A L D I m a g e % 71% % 72% % 73% % 74%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 75% 76% ReadHALDImage() creates a Hald color lookup table image and returns it. It 77% allocates the memory necessary for the new Image structure and returns a 78% pointer to the new image. 79% 80% The format of the ReadHALDImage method is: 81% 82% Image *ReadHALDImage(const ImageInfo *image_info, 83% ExceptionInfo *exception) 84% 85% A description of each parameter follows: 86% 87% o image_info: the image info. 88% 89% o exception: return any errors or warnings in this structure. 90% 91*/ 92static Image *ReadHALDImage(const ImageInfo *image_info, 93 ExceptionInfo *exception) 94{ 95 Image 96 *image; 97 98 MagickBooleanType 99 status; 100 101 size_t 102 cube_size, 103 level; 104 105 ssize_t 106 y; 107 108 /* 109 Create HALD color lookup table image. 110 */ 111 assert(image_info != (const ImageInfo *) NULL); 112 assert(image_info->signature == MagickCoreSignature); 113 if (image_info->debug != MagickFalse) 114 (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s", 115 image_info->filename); 116 assert(exception != (ExceptionInfo *) NULL); 117 assert(exception->signature == MagickCoreSignature); 118 image=AcquireImage(image_info,exception); 119 level=0; 120 if (*image_info->filename != '\0') 121 level=StringToUnsignedLong(image_info->filename); 122 if (level < 2) 123 level=8; 124 status=MagickTrue; 125 cube_size=level*level; 126 image->columns=(size_t) (level*cube_size); 127 image->rows=(size_t) (level*cube_size); 128 status=SetImageExtent(image,image->columns,image->rows,exception); 129 if (status == MagickFalse) 130 return(DestroyImageList(image)); 131 for (y=0; y < (ssize_t) image->rows; y+=(ssize_t) level) 132 { 133 ssize_t 134 blue, 135 green, 136 red; 137 138 register Quantum 139 *magick_restrict q; 140 141 if (status == MagickFalse) 142 continue; 143 q=QueueAuthenticPixels(image,0,y,image->columns,(size_t) level,exception); 144 if (q == (Quantum *) NULL) 145 { 146 status=MagickFalse; 147 continue; 148 } 149 blue=y/(ssize_t) level; 150 for (green=0; green < (ssize_t) cube_size; green++) 151 { 152 for (red=0; red < (ssize_t) cube_size; red++) 153 { 154 SetPixelRed(image,ClampToQuantum(QuantumRange*red/(cube_size-1.0)),q); 155 SetPixelGreen(image,ClampToQuantum(QuantumRange*green/(cube_size-1.0)), 156 q); 157 SetPixelBlue(image,ClampToQuantum(QuantumRange*blue/(cube_size-1.0)),q); 158 SetPixelAlpha(image,OpaqueAlpha,q); 159 q+=GetPixelChannels(image); 160 } 161 } 162 if (SyncAuthenticPixels(image,exception) == MagickFalse) 163 status=MagickFalse; 164 } 165 return(GetFirstImageInList(image)); 166} 167 168/* 169%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 170% % 171% % 172% % 173% R e g i s t e r H A L D I m a g e % 174% % 175% % 176% % 177%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 178% 179% RegisterHALDImage() adds attributes for the Hald color lookup table image 180% format to the list of supported formats. The attributes include the image 181% format tag, a method to read and/or write the format, whether the format 182% supports the saving of more than one frame to the same file or blob, whether 183% the format supports native in-memory I/O, and a brief description of the 184% format. 185% 186% The format of the RegisterHALDImage method is: 187% 188% size_t RegisterHALDImage(void) 189% 190*/ 191ModuleExport size_t RegisterHALDImage(void) 192{ 193 MagickInfo 194 *entry; 195 196 entry=AcquireMagickInfo("HALD","HALD", 197 "Identity Hald color lookup table image"); 198 entry->decoder=(DecodeImageHandler *) ReadHALDImage; 199 entry->flags^=CoderAdjoinFlag; 200 entry->format_type=ImplicitFormatType; 201 entry->flags|=CoderRawSupportFlag; 202 entry->flags|=CoderEndianSupportFlag; 203 (void) RegisterMagickInfo(entry); 204 return(MagickImageCoderSignature); 205} 206 207/* 208%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 209% % 210% % 211% % 212% U n r e g i s t e r H A L D I m a g e % 213% % 214% % 215% % 216%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 217% 218% UnregisterHALDImage() removes format registrations made by the 219% HALD module from the list of supported formats. 220% 221% The format of the UnregisterHALDImage method is: 222% 223% UnregisterHALDImage(void) 224% 225*/ 226ModuleExport void UnregisterHALDImage(void) 227{ 228 (void) UnregisterMagickInfo("HALD"); 229} 230