Hi Mark,

Mark Wielaard wrote:

On Sat, 2006-07-22 at 00:00 +0200, Andreas Tobler wrote:
But he also suggested to reorganise the code path to check for (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) only once and not for all pixels. Thanks Assen!

I attach a patch which does this. The improvement is not bad, around a factor 5 for a BufferedImage 816x616 RGBA.

Comments? Ok for head?

Seems like a good idea!
Just one coding style nitpick:

Thanks for doing this!


+      } else {
+      for (int i = 0; i < data.length; i++ )
+       {

That should be:

       }
     else
       {
         for (int i = 0; i < data.length; i++)
           {

But looks fine otherwise.

Thanks,

Thanks, committed.

Andreas


Index: gnu/java/awt/peer/gtk/CairoSurface.java
===================================================================
RCS file: /cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/CairoSurface.java,v
retrieving revision 1.13
diff -u -r1.13 CairoSurface.java
--- gnu/java/awt/peer/gtk/CairoSurface.java 17 Jul 2006 22:41:03 -0000 1.13
+++ gnu/java/awt/peer/gtk/CairoSurface.java     21 Jul 2006 22:38:01 -0000
@@ -175,9 +175,9 @@
     int[] data = image.getPixels();

     // Swap ordering from GdkPixbuf to Cairo
-    for(int i = 0; i < data.length; i++ )
+    if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN)
       {
-       if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN)
+       for (int i = 0; i < data.length; i++ )
          {
            // On a big endian system we get a RRGGBBAA data array.
            int alpha = (data[i] & 0xFF);
@@ -195,7 +195,10 @@
                  | ( b  & 0x000000FF);
              }
          }
-       else
+      }
+    else
+      {
+       for (int i = 0; i < data.length; i++ )
          {
            // On a little endian system we get a AABBGGRR data array.
            int alpha = (data[i] & 0xFF000000) >> 24;

Reply via email to