Index: trunk/Ohana/src/kapa2/src/JPEGit24.c
===================================================================
--- trunk/Ohana/src/kapa2/src/JPEGit24.c	(revision 19830)
+++ trunk/Ohana/src/kapa2/src/JPEGit24.c	(revision 19833)
@@ -1,4 +1,6 @@
 # include "Ximage.h"
 # include "jpeglib.h"
+
+# define MY_SWAP_INT(A,B) { int tmp; tmp = A; A = B; B = tmp; }
 
 # define WHITE_R 255
@@ -21,5 +23,5 @@
   int i_start, i_end, j_start, j_end;
   int dropback;  /* this is a bit of a kludge... */
-  int dx, dy, DX, DY;
+  int dx, dy, DX, DY, inDX, inDY;
   int quality;
   int expand_in, expand_out;
@@ -99,6 +101,14 @@
   Picture_Upper (&i_end, &j_end, &image[0].image[0].matrix, &image[0].picture);
 
+  if (i_end < i_start) MY_SWAP_INT (i_start, i_end);
+  if (j_end < j_start) MY_SWAP_INT (j_start, j_end);
+
   // Ix,Iy are the first displayed image pixel
   Picture_to_Image (&Ix, &Iy, i_start, j_start, &image[0].picture);
+  Ix = MIN (MAX (0, Ix), DX - 1);
+  Iy = MIN (MAX (0, Iy), DY - 1);
+
+  inDX = image[0].picture.flipx ? -1 : +1;
+  inDY = image[0].picture.flipy ? -1 : +1;
 
   dropback = expand_out - (i_end - i_start) % expand_out;
@@ -125,5 +135,5 @@
   
   /*** fill in the image data region ***/
-  for (j = j_start; j < j_end; j+= expand_out, in_pix_ref += expand_in*DX) {
+  for (j = j_start; j < j_end; j+= expand_out, in_pix_ref += inDY*expand_in*DX) {
     
     /* create one output image line */
@@ -139,5 +149,5 @@
     
     /*** fill in the picture region ***/
-    for (i = i_start; i < i_end; i+=expand_out, in_pix+=expand_in) {
+    for (i = i_start; i < i_end; i+=expand_out, in_pix += inDX*expand_in) {
       for (ii = 0; ii < expand_out; ii++, out_pix+=3) {
 	out_pix[0] = pixel1[*in_pix];
