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;