v07i080: xtiff, Patch2, Part01/01

dan sears dbs at decpa.pa.dec.com
Fri Jun 1 13:36:31 AEST 1990


Submitted-by: dbs at decpa.pa.dec.com (dan sears)
Posting-number: Volume 7, Issue 80
Archive-name: xtiff/patch2
Patch-To: xtiff: Volume 7, Issue 36, 54

This patch fixes a bug in xtiff dealing with MINISWHTE images.

--Dan Sears

NB: xtiff.c requires libtiff version 2.2, which is currently in beta test.

-- cut here (patch.01) --
diff -r -c rev1/patchlevel.h rev2/patchlevel.h
*** rev1/patchlevel.h	Tue May 29 19:06:26 1990
--- rev2/patchlevel.h	Tue May 29 19:02:02 1990
***************
*** 1 ****
! #define PATCHLEVEL 1
--- 1 ----
! #define PATCHLEVEL 2
diff -r -c rev1/xtiff.c rev2/xtiff.c
*** rev1/xtiff.c	Tue May 29 19:06:27 1990
--- rev2/xtiff.c	Tue May 29 19:02:03 1990
***************
*** 4,9 ****
--- 4,11 ----
   * Dan Sears
   * Chris Sears
   *
+  * Revsion 1.2  90/05/29
+  *      Fixed a bug with MINISWHTE images.
   * Revsion 1.1  90/05/16
   *      Fixed a few minor bugs.
   * Revsion 1.0  90/05/07
***************
*** 486,493 ****
  
      xGcValues.function = GXcopy;
      xGcValues.plane_mask = AllPlanes;
!     xGcValues.foreground = XWhitePixel(xDisplay, xScreen);
!     xGcValues.background = XBlackPixel(xDisplay, xScreen);
  
      xWinGc = XCreateGC(xDisplay, xWindow, GCFunction | GCPlaneMask
          | GCForeground | GCBackground, &xGcValues);
--- 488,500 ----
  
      xGcValues.function = GXcopy;
      xGcValues.plane_mask = AllPlanes;
!     if (tfPhotometricInterpretation == PHOTOMETRIC_MINISWHITE) {
!         xGcValues.foreground = XWhitePixel(xDisplay, xScreen);
!         xGcValues.background = XBlackPixel(xDisplay, xScreen);
!     } else {
!         xGcValues.foreground = XBlackPixel(xDisplay, xScreen);
!         xGcValues.background = XWhitePixel(xDisplay, xScreen);
!     }
  
      xWinGc = XCreateGC(xDisplay, xWindow, GCFunction | GCPlaneMask
          | GCForeground | GCBackground, &xGcValues);
***************
*** 502,508 ****
      size_hints.height = size_hints.min_height =
          size_hints.max_height = tfImageHeight;
  
!     XSetStandardProperties(xDisplay, xWindow, programName, programName,
          xTiffIconPixmap, xargv, xargc, &size_hints);
  
      if (colors != NULL)
--- 509,515 ----
      size_hints.height = size_hints.min_height =
          size_hints.max_height = tfImageHeight;
  
!     XSetStandardProperties(xDisplay, xWindow, fileName, fileName,
          xTiffIconPixmap, xargv, xargc, &size_hints);
  
      if (colors != NULL)
***************
*** 587,614 ****
              }
          }
      } else {
!         /*
!          * If the image is 1-bit and PHOTOMETRIC_MINISWHITE then invert
!          * the image because we use the default colormap and can't change it.
!          */
!         if ((tfPhotometricInterpretation == PHOTOMETRIC_MINISWHITE)
!             && (tfImageDepth == 1)) {
              output_p = imageMemory = (u_char *)
                  malloc(tfBytesPerRow * tfImageHeight);
              MCHECK(imageMemory);
  
-             for (i = 0; i < tfImageHeight; i++, output_p += tfBytesPerRow) {
-                 if (TIFFReadScanline(tfFile, output_p, i, 0) < 0)
-                     break;
-                 input_p = output_p;
-                 for (j = 0; j < tfBytesPerRow; j++, input_p++)
-                     *input_p = ~ *input_p;
-             }
-         } else if (xImageDepth == tfImageDepth) {
-             output_p = imageMemory = (u_char *)
-                 malloc(tfBytesPerRow * tfImageHeight);
-             MCHECK(imageMemory);
- 
              for (i = 0; i < tfImageHeight; i++, output_p += tfBytesPerRow)
                  if (TIFFReadScanline(tfFile, output_p, i, 0) < 0)
                      break;
--- 594,604 ----
              }
          }
      } else {
!         if (xImageDepth == tfImageDepth) {
              output_p = imageMemory = (u_char *)
                  malloc(tfBytesPerRow * tfImageHeight);
              MCHECK(imageMemory);
  
              for (i = 0; i < tfImageHeight; i++, output_p += tfBytesPerRow)
                  if (TIFFReadScanline(tfFile, output_p, i, 0) < 0)
                      break;
***************
*** 705,712 ****
           * of depth one and use XCopyPlane().  This is idiomatic.
           */
          if (xImageDepth == 1) {
!             xBitmapGc = XCreateGC(xDisplay, xImagePixmap, GCFunction
!                 | GCPlaneMask | GCForeground | GCBackground, &xGcValues);
              XPutImage(xDisplay, xImagePixmap, xBitmapGc, xImage,
                  0, 0, 0, 0, xImage->width, xImage->height);
          } else
--- 695,701 ----
           * of depth one and use XCopyPlane().  This is idiomatic.
           */
          if (xImageDepth == 1) {
!             xBitmapGc = XCreateGC(xDisplay, xImagePixmap, 0, &xGcValues);
              XPutImage(xDisplay, xImagePixmap, xBitmapGc, xImage,
                  0, 0, 0, 0, xImage->width, xImage->height);
          } else

dan
----------------------------------------------------
O'Reilly && Associates   argv at sun.com / argv at ora.com
Opinions expressed reflect those of the author only.



More information about the Comp.sources.x mailing list