Bladeren bron

REVIEW: ImageAlphaMask()

When adding alpha mask to GRAYSCALE image, if using ImageFormat(), it could change pixel values, now we avoid that, mask is just added as an extra channel
Ray 6 jaren geleden
bovenliggende
commit
12d3e21f1b
1 gewijzigde bestanden met toevoegingen van 8 en 3 verwijderingen
  1. 8 3
      src/textures.c

+ 8 - 3
src/textures.c

@@ -1181,13 +1181,18 @@ void ImageAlphaMask(Image *image, Image alphaMask)
         // In case image is only grayscale, we just add alpha channel
         if (image->format == UNCOMPRESSED_GRAYSCALE)
         {
-            ImageFormat(image, UNCOMPRESSED_GRAY_ALPHA);
+            unsigned char *data = (unsigned char *)RL_MALLOC(image->width*image->height*2);
 
             // Apply alpha mask to alpha channel
-            for (int i = 0, k = 1; (i < mask.width*mask.height) || (i < image->width*image->height); i++, k += 2)
+            for (int i = 0, k = 0; (i < mask.width*mask.height) || (i < image->width*image->height); i++, k += 2)
             {
-                ((unsigned char *)image->data)[k] = ((unsigned char *)mask.data)[i];
+                data[k] = ((unsigned char *)image->data)[i];
+                data[k + 1] = ((unsigned char *)mask.data)[i];
             }
+            
+            RL_FREE(image->data);
+            image->data = data;
+            image->format = UNCOMPRESSED_GRAY_ALPHA;
         }
         else
         {