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;