[haiku-commits] haiku: hrev46676 - src/libs/icon

  • From: pulkomandy@xxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 14 Jan 2014 19:12:55 +0100 (CET)

hrev46676 adds 1 changeset to branch 'master'
old head: 72921639156c94839ff23ae94477371390e58d2d
new head: e3265202413cd402548ba28003e430e08f8acea6
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=e326520+%5E7292163

----------------------------------------------------------------------------

e326520: Fix bitmap scaling
  
  Bug introduced in 810f0a42e50b32d17c478f0bdf73b1b34d315ad0.
  The uint8 cast were also acting as masks for each of the pixel
  components, moving them out of the multiplications made things go wrong.
  
  Use rgb_color instead of messing with bitshifts and masks for better
  readbility (the colors are out of order, but the processing is the same
  on each color so the end result is valid).

                             [ Adrien Destugues <pulkomandy@xxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev46676
Commit:      e3265202413cd402548ba28003e430e08f8acea6
URL:         http://cgit.haiku-os.org/haiku/commit/?id=e326520
Author:      Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
Date:        Tue Jan 14 17:46:45 2014 UTC

----------------------------------------------------------------------------

1 file changed, 15 insertions(+), 15 deletions(-)
src/libs/icon/IconUtils.cpp | 30 +++++++++++++++---------------

----------------------------------------------------------------------------

diff --git a/src/libs/icon/IconUtils.cpp b/src/libs/icon/IconUtils.cpp
index bbefa87..229fe6b 100644
--- a/src/libs/icon/IconUtils.cpp
+++ b/src/libs/icon/IconUtils.cpp
@@ -113,9 +113,9 @@ scale_down(const uint8* srcBits, uint8* dstBits, int32 
srcWidth, int32 srcHeight
        float tmp;
        float d1, d2, d3, d4;
                // coefficients
-       uint32 p1, p2, p3, p4;
+       rgb_color p1, p2, p3, p4;
                // nearby pixels
-       uint8 red, green, blue, alpha;
+       rgb_color out;
                // color components
 
        for (int32 i = 0; i < dstHeight; i++) {
@@ -143,23 +143,23 @@ scale_down(const uint8* srcBits, uint8* dstBits, int32 
srcWidth, int32 srcHeight
                        d4 = (1 - t) * u;
 
                        // nearby pixels
-                       p1 = *((uint32*)srcBits + (l * srcWidth) + c);
-                       p2 = *((uint32*)srcBits + (l * srcWidth) + c + 1);
-                       p3 = *((uint32*)srcBits + ((l + 1)* srcWidth) + c + 1);
-                       p4 = *((uint32*)srcBits + ((l + 1)* srcWidth) + c);
+                       p1 = *((rgb_color*)srcBits + (l * srcWidth) + c);
+                       p2 = *((rgb_color*)srcBits + (l * srcWidth) + c + 1);
+                       p3 = *((rgb_color*)srcBits + ((l + 1)* srcWidth) + c + 
1);
+                       p4 = *((rgb_color*)srcBits + ((l + 1)* srcWidth) + c);
 
                        // color components
-                       blue = (uint8)(p1 * d1 + p2 * d2 + p3 * d3 + p4 * d4);
-                       green = (uint8)((p1 >> 8) * d1 + (p2 >> 8) * d2
-                               + (p3 >> 8) * d3 + (p4 >> 8) * d4);
-                       red = (uint8)((p1 >> 16) * d1 + (p2 >> 16) * d2
-                               + (p3 >> 16) * d3 + (p4 >> 16) * d4);
-                       alpha = (uint8)((p1 >> 24) * d1 + (p2 >> 24) * d2
-                               + (p3 >> 24) * d3 + (p4 >> 24) * d4);
+                       out.blue = (uint8)(p1.blue * d1 + p2.blue * d2 + 
p3.blue * d3 
+                               + p4.blue * d4);
+                       out.green = (uint8)(p1.green * d1 + p2.green * d2 + 
p3.green * d3 
+                               + p4.green * d4);
+                       out.red = (uint8)(p1.red * d1 + p2.red * d2 + p3.red * 
d3 
+                               + p4.red * d4);
+                       out.alpha = (uint8)(p1.alpha * d1 + p2.alpha * d2 + 
p3.alpha * d3
+                               + p4.alpha * d4);
 
                        // destination RGBA pixel
-                       *((uint32*)dstBits + (i * dstWidth) + j)
-                               = (alpha << 24) | (red << 16) | (green << 8) | 
(blue);
+                       *((rgb_color*)dstBits + (i * dstWidth) + j) = out;
                }
        }
 }


Other related posts:

  • » [haiku-commits] haiku: hrev46676 - src/libs/icon - pulkomandy