diff --git a/coders/caption.c b/coders/caption.c
index 9bf12a0..320b559 100644
--- a/coders/caption.c
+++ b/coders/caption.c
@@ -358,14 +358,15 @@
     for (x=page.x; x < (ssize_t) (image->columns-page.x); x++)
     {
       MagickRealType
-        fill_opacity;
+        fill_alpha;
 
       (void) GetFillColor(draw_info,x,y,&fill_color,exception);
-      fill_opacity=(*p)*fill_color.alpha/canvas->num_grays;
+      fill_alpha=(MagickRealType) (*p)/(canvas->num_grays-1);
       if (draw_info->text_antialias == MagickFalse)
-        fill_opacity=fill_opacity >= 0.5 ? 1.0 : 0.0;
-      CompositePixelOver(image,&fill_color,fill_opacity,q,
-        GetPixelAlpha(image,q),q);
+        fill_alpha=fill_alpha >= 0.5 ? 1.0 : 0.0;
+      fill_alpha=fill_alpha*fill_color.alpha;
+      CompositePixelOver(image,&fill_color,fill_alpha,q,GetPixelAlpha(image,q),
+        q);
       p++;
       q+=GetPixelChannels(image);
     }