diff options
author | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2006-11-13 00:29:48 +0000 |
---|---|---|
committer | Andrew John Hughes <gnu_andrew@member.fsf.org> | 2006-11-13 00:29:48 +0000 |
commit | 2a2b91f336fe4f6c2a314db2bc4cdffff6cf5a61 (patch) | |
tree | 21df1df36e4070dbe32198f06ea33964e82a998b /gnu/java/awt/peer/gtk/GtkImageConsumer.java | |
parent | 237bdd93058f891ae4567cf4e051c5831bd4646b (diff) | |
download | classpath-2a2b91f336fe4f6c2a314db2bc4cdffff6cf5a61.tar.gz |
2006-11-13 Andrew John Hughes <gnu_andrew@member.fsf.org>
* Merge of HEAD-->generics from 2006/11/04-2006/11/12.
Diffstat (limited to 'gnu/java/awt/peer/gtk/GtkImageConsumer.java')
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkImageConsumer.java | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/gnu/java/awt/peer/gtk/GtkImageConsumer.java b/gnu/java/awt/peer/gtk/GtkImageConsumer.java index f1a74b8cc..53e97bb1a 100644 --- a/gnu/java/awt/peer/gtk/GtkImageConsumer.java +++ b/gnu/java/awt/peer/gtk/GtkImageConsumer.java @@ -42,6 +42,7 @@ import java.awt.image.ColorModel; import java.awt.image.ImageConsumer; import java.awt.image.ImageProducer; import java.awt.image.MemoryImageSource; +import java.nio.ByteOrder; import java.util.Hashtable; /** @@ -103,7 +104,7 @@ public class GtkImageConsumer implements ImageConsumer scansize); } - public synchronized void setPixels (int x, int y, int width, int height, + public synchronized void setPixels (int x, int y, int width, int height, ColorModel cm, int[] pixels, int offset, int scansize) { @@ -117,18 +118,34 @@ public class GtkImageConsumer implements ImageConsumer width); else { - for (int i = 0; i < height; i++) - for (int j = 0; j < width; j++) - { - // get in AARRGGBB and convert to AABBGGRR - int pix = cm.getRGB(pixels[offset + (i * scansize) + x + j]); - byte b = (byte)(pix & 0xFF); - byte r = (byte)(((pix & 0x00FF0000) >> 16) & 0xFF); - pix &= 0xFF00FF00; - pix |= ((b & 0xFF) << 16); - pix |= (r & 0xFF); - pixelCache[(y + i) * this.width + x + j] = pix; - } + if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) + { + for (int i = 0; i < height; i++) + for (int j = 0; j < width; j++) + { + // get in RRGGBBAA and convert to AARRGGBB + int pix = cm.getRGB(pixels[offset + (i * scansize) + x + j]); + int a = ((pix & 0xFF000000) >> 24) & 0xFF; + int rgb = (pix & 0x00FFFFFF) << 8; + pix = rgb | a; + pixelCache[(y + i) * this.width + x + j] = pix; + } + } + else + { + for (int i = 0; i < height; i++) + for (int j = 0; j < width; j++) + { + // get in AARRGGBB and convert to AABBGGRR + int pix = cm.getRGB(pixels[offset + (i * scansize) + x + j]); + byte b = (byte)(pix & 0xFF); + byte r = (byte)(((pix & 0x00FF0000) >> 16) & 0xFF); + pix &= 0xFF00FF00; + pix |= ((b & 0xFF) << 16); + pix |= (r & 0xFF); + pixelCache[(y + i) * this.width + x + j] = pix; + } + } } } |