]>
git.saurik.com Git - wxWidgets.git/blob - src/tiff/tif_next.c
   4  * Copyright (c) 1988-1997 Sam Leffler 
   5  * Copyright (c) 1991-1997 Silicon Graphics, Inc. 
   7  * Permission to use, copy, modify, distribute, and sell this software and  
   8  * its documentation for any purpose is hereby granted without fee, provided 
   9  * that (i) the above copyright notices and this permission notice appear in 
  10  * all copies of the software and related documentation, and (ii) the names of 
  11  * Sam Leffler and Silicon Graphics may not be used in any advertising or 
  12  * publicity relating to the software without the specific, prior written 
  13  * permission of Sam Leffler and Silicon Graphics. 
  15  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,  
  16  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY  
  17  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.   
  19  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR 
  20  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 
  21  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 
  22  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF  
  23  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE  
  32  * NeXT 2-bit Grey Scale Compression Algorithm Support 
  35 #define SETPIXEL(op, v) {                       \ 
  36         switch (npixels++ & 3) {                \ 
  37         case 0: op[0]  = (u_char) ((v) << 6); break;    \ 
  38         case 1: op[0] |= (v) << 4; break;       \ 
  39         case 2: op[0] |= (v) << 2; break;       \ 
  40         case 3: *op++ |= (v);      break;       \ 
  44 #define LITERALROW      0x00 
  45 #define LITERALSPAN     0x40 
  46 #define WHITE           ((1<<2)-1) 
  49 NeXTDecode(TIFF
* tif
, tidata_t buf
, tsize_t occ
, tsample_t s
) 
  51         register u_char 
*bp
, *op
; 
  59          * Each scanline is assumed to start off as all 
  60          * white (we assume a PhotometricInterpretation 
  61          * of ``min-is-black''). 
  63         for (op 
= buf
, cc 
= occ
; cc
-- > 0;) 
  66         bp 
= (u_char 
*)tif
->tif_rawcp
; 
  68         scanline 
= tif
->tif_scanlinesize
; 
  69         for (row 
= buf
; (long)occ 
> 0; occ 
-= scanline
, row 
+= scanline
) { 
  74                          * The entire scanline is given as literal values. 
  78                         _TIFFmemcpy(row
, bp
, scanline
); 
  85                          * The scanline has a literal span 
  86                          * that begins at some offset. 
  88                         off 
= (bp
[0] * 256) + bp
[1]; 
  89                         n 
= (bp
[2] * 256) + bp
[3]; 
  90                         if (cc 
< 4+n 
|| off
+n 
> scanline
) 
  92                         _TIFFmemcpy(row
+off
, bp
+4, n
); 
  98                         register int npixels 
= 0, grey
; 
  99                         u_long imagewidth 
= tif
->tif_dir
.td_imagewidth
; 
 102                          * The scanline is composed of a sequence 
 103                          * of constant color ``runs''.  We shift 
 104                          * into ``run mode'' and interpret bytes 
 105                          * as codes of the form <color><npixels> 
 106                          * until we've filled the scanline. 
 114                                 if (npixels 
>= (int) imagewidth
) 
 124         tif
->tif_rawcp 
= (tidata_t
) bp
; 
 128         TIFFError(tif
->tif_name
, "NeXTDecode: Not enough data for scanline %ld", 
 129             (long) tif
->tif_row
); 
 134 TIFFInitNeXT(TIFF
* tif
, int scheme
) 
 137         tif
->tif_decoderow 
= NeXTDecode
; 
 138         tif
->tif_decodestrip 
= NeXTDecode
; 
 139         tif
->tif_decodetile 
= NeXTDecode
; 
 142 #endif /* NEXT_SUPPORT */