Converting a integer shift to a byte offset of course depends on endianness
as the first byte might be either shift 0 or shift 24.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4165 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/common/rfb/PixelFormat.cxx b/common/rfb/PixelFormat.cxx
index afcf429..11c2d7a 100644
--- a/common/rfb/PixelFormat.cxx
+++ b/common/rfb/PixelFormat.cxx
@@ -187,9 +187,15 @@
     // Optimised common case
     rdr::U8 *r, *g, *b;
 
-    r = dst + redShift/8;
-    g = dst + greenShift/8;
-    b = dst + blueShift/8;
+    if (bigEndian) {
+      r = dst + (24 - redShift)/8;
+      g = dst + (24 - greenShift)/8;
+      b = dst + (24 - blueShift)/8;
+    } else {
+      r = dst + redShift/8;
+      g = dst + greenShift/8;
+      b = dst + blueShift/8;
+    }
 
     while (pixels--) {
       *r = *(src++);
@@ -253,9 +259,15 @@
     // Optimised common case
     const rdr::U8 *r, *g, *b;
 
-    r = src + redShift/8;
-    g = src + greenShift/8;
-    b = src + blueShift/8;
+    if (bigEndian) {
+      r = src + (24 - redShift)/8;
+      g = src + (24 - greenShift)/8;
+      b = src + (24 - blueShift)/8;
+    } else {
+      r = src + redShift/8;
+      g = src + greenShift/8;
+      b = src + blueShift/8;
+    }
 
     while (pixels--) {
       *(dst++) = *r;