Fixed bug in DeleteDIB.
authorStephen Adams <edu/mit/csail/zurich/adams>
Mon, 25 Sep 1995 18:10:46 +0000 (18:10 +0000)
committerStephen Adams <edu/mit/csail/zurich/adams>
Mon, 25 Sep 1995 18:10:46 +0000 (18:10 +0000)
Rewrote loop to speed up DIBSetPixelsUnaligned by 2x-3x.
Put in MIT copyright notice.

v7/src/win32/dibutils/dibutils.c

index 1a7e948cc2c65f4ea0deada3894990058b1aaf52..e12c3e0b7285595e837b595a14d138b5fbf6f21e 100644 (file)
@@ -1,3 +1,39 @@
+/* -*-C-*-
+
+$Id: dibutils.c,v 1.2 1995/09/25 18:10:46 adams Exp $
+
+Copyright (c) 1994-1995 Massachusetts Institute of Technology
+
+This material was developed by the Scheme project at the Massachusetts
+Institute of Technology, Department of Electrical Engineering and
+Computer Science.  Permission to copy this software, to redistribute
+it, and to use it for any purpose is granted, subject to the following
+restrictions and understandings.
+
+1. Any copy made of this software must include this copyright notice
+in full.
+
+2. Users of this software agree to make their best efforts (a) to
+return to the MIT Scheme project any improvements or extensions that
+they make, so that these may be included in future releases; and (b)
+to inform MIT of noteworthy uses of this software.
+
+3. All materials developed as a consequence of the use of this
+software shall duly acknowledge such use, in accordance with the usual
+standards of acknowledging credit in academic research.
+
+4. MIT has made no warrantee or representation that the operation of
+this software will be error-free, and MIT is under no obligation to
+provide any services, by way of maintenance, update, or otherwise.
+
+5. In conjunction with products arising from the use of this material,
+there shall be no use of the name of the Massachusetts Institute of
+Technology nor of any adaptation thereof in any advertising,
+promotional, or sales literature without prior written consent from
+MIT in each case. */
+
+
+/* This software was derived from the following:  */
 
 /******************************************************************************\
 *       This is a part of the Microsoft Source Code Samples. 
@@ -196,8 +232,10 @@ BOOL WriteDIB (
  ****************************************************************************/
 BOOL DeleteDIB (HANDLE hdib)
 {
-    if (!hdib)
+    if (hdib)
       return  GlobalFree (hdib) == 0;
+    else
+      return  FALSE;
 }
 
 /****************************************************************************
@@ -542,7 +580,7 @@ BOOL DIBSetPixelsUnaligned (HANDLE hdib, BYTE *bytes)
     DWORD width, height;
 
     if (!hdib)
-      return  0;
+      return  FALSE;
 
     lpbmi      = (LPBITMAPINFOHEADER) GlobalLock(hdib);
     lpbci      = (LPBITMAPCOREHEADER) lpbmi;
@@ -568,16 +606,29 @@ BOOL DIBSetPixelsUnaligned (HANDLE hdib, BYTE *bytes)
       {
        BYTE *src = src_area + width*(height-scanline-1);
        BYTE *dest = dest_area + aligned_width * scanline;
-       long  column;
-       for (column = width; column>0; column--)
+       long  column = width;
+       *(DWORD*)(dest+aligned_width-sizeof(DWORD)) = 0;  // zero-fill end word
+      loop:
+       if (column>=8)
+       {
+         ((DWORD*)dest)[0] = ((DWORD*)src)[0];
+         ((DWORD*)dest)[1] = ((DWORD*)src)[1];
+         column -= 2*sizeof(DWORD);
+         src    += 2*sizeof(DWORD);
+         dest   += 2*sizeof(DWORD);
+         goto loop;
+       }
+       else if (column>0)
+       {
+         column -= 1;
          *dest++ = *src++;
-       for (column = aligned_width - width;  column>0;  column--)
-         *dest++ = 0;
+         goto loop;
+       }
       }
     }
 
     GlobalUnlock (hdib);
-    return  1;
+    return  TRUE;
 }
 
 /****************************************************************************