Index: mapdrawgdal.c
===================================================================
--- mapdrawgdal.c	(révision 7656)
+++ mapdrawgdal.c	(copie de travail)
@@ -745,8 +745,60 @@
       }
   }
   else
+  {
       pabyRawAlpha = NULL;
 
+#if defined(GDAL_VERSION_NUM) && GDAL_VERSION_NUM >= 1500
+      /* If we have no alpha band, but the dataset provide a dataset */
+      /* transparency mask, use it as an alpha channel */
+      int nMaskFlags = GDALGetMaskFlags(hBand1);
+      if( (CSLFetchNameValue( layer->processing, "BANDS" ) == NULL ) &&
+          (nMaskFlags & GMF_PER_DATASET) != 0 &&
+          (nMaskFlags & (GMF_NODATA|GMF_ALL_VALID)) == 0 )
+      {
+        CPLErr eErr;
+
+        pabyRawAlpha = (unsigned char *) malloc(dst_xsize * dst_ysize);
+        if( pabyRawAlpha == NULL )
+        {
+            msSetError(MS_MEMERR, "Allocating work image of size %dx%d failed.",
+                        "msDrawRasterLayerGDAL()", dst_xsize, dst_ysize );
+            return -1;
+        }
+
+        hBandAlpha = GDALGetMaskBand(hBand1);
+
+        eErr = GDALRasterIO( hBandAlpha, GF_Read, 
+                    src_xoff, src_yoff, src_xsize, src_ysize, 
+                    pabyRawAlpha, dst_xsize, dst_ysize, GDT_Byte, 0,0);
+
+        if( eErr != CE_None )
+        {
+            msSetError( MS_IOERR, "GDALRasterIO() failed: %s", 
+                        CPLGetLastErrorMsg(), "drawGDAL()" );
+            free( pabyRaw1 );
+            if( pabyRaw3 != NULL )
+            {
+                free( pabyRaw2 );
+                free( pabyRaw3 );
+            }
+
+            free( pabyRawAlpha );
+            return -1;
+        }
+
+        /* In case the mask is not an alpha channel, expand values of 1 to 255, */
+        /* so we can deal as it was an alpha band afterwards */
+        if ((nMaskFlags & GMF_ALPHA) == 0)
+        {
+            for(i=0;i<dst_xsize * dst_ysize;i++)
+                if (pabyRawAlpha[i])
+                    pabyRawAlpha[i] = 255;
+        }
+      }
+#endif
+  }
+
 /* -------------------------------------------------------------------- */
 /*      Single band plus colormap with alpha blending to 8bit.          */
 /* -------------------------------------------------------------------- */

