<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://jogamp.org/bugzilla/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.2"
          urlbase="https://jogamp.org/bugzilla/"
          
          maintainer="sgothel@jausoft.com"
>

    <bug>
          <bug_id>292</bug_id>
          
          <creation_ts>2007-04-12 04:00:50 +0200</creation_ts>
          <short_desc>gluScaleImage does not scale correctly</short_desc>
          <delta_ts>2010-03-24 07:50:23 +0100</delta_ts>
          <reporter_accessible>0</reporter_accessible>
          <cclist_accessible>0</cclist_accessible>
          <classification_id>3</classification_id>
          <classification>JogAmp</classification>
          <product>Jogl</product>
          <component>core</component>
          <version>1</version>
          <rep_platform>All</rep_platform>
          <op_sys>all</op_sys>
          <bug_status>VERIFIED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sven Gothel">sgothel</reporter>
          <assigned_to name="Sven Gothel">sgothel</assigned_to>
          
          
          <cf_type>DEFECT</cf_type>
          <cf_scm_refs></cf_scm_refs>
          <cf_workaround>---</cf_workaround>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>308</commentid>
    <comment_count>0</comment_count>
    <who name="Sven Gothel">sgothel</who>
    <bug_when>2010-03-24 07:50:23 +0100</bug_when>
    <thetext>


---- Reported by alang 2007-04-12 04:00:50 ----

Attached is an example application showing that gluScaleImage does not always 
scale correctly. 

Run the application with and without the following JVM command line argument:
 
-Djogl.glu.nojava
 
When the application is ran *with* this command line argument the texture is
displayed correctly. When the application is ran without the texture is not
scaled correctly. 

--------------------------------------------
Attached application: JOGLTexture.java

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.nio.*;
import java.util.*;

import javax.imageio.*;
import javax.media.opengl.*;
import javax.media.opengl.glu.*;

/**
 * Example JOGL application showing bug when using gluScaleImage. The 
application
 * simply displays a quad with a texture map. Load any non square image, the
 * sample included is 134x57. Run the application with and without the following
 * JVM command line argument:
 * 
 * -Djogl.glu.nojava
 * 
 * When the application is ran *with* this command line argument the texture is
 * displayed correctly. When the application is ran without the texture is not
 * scaled correctly. 
 * 
 * Run environment: 
 * Machine  : Dell Precision M70 laptop
 * OS       : Windows XP SP2
 * Graphics : NVIDIA Quadro FX Go1400
 * Drivers  : lastest from DELL dated: 22/03/2006 ver. 8.4.3.0
 * JVM      : j2sdk1.4.2_10
 * JOGL     : release 1.1.0-rc3 from Feb 14 2007
 * 
 * @author Alan Michael Gay, AVS Inc.
 */
public class JOGLTexture extends Frame implements GLEventListener, ImageConsumer
{
    // Name of example mage file to load
    String nonSquareImageFileName = &quot;.\\non-squareimage.jpg&quot;;
    
    //
    // OpenGL variables.
    //
    private GLU glu = new GLU();  
    private int textureName;

    //
    // Workspace variables for consuming image.
    //
    boolean imageComplete = false;    
    private int imageWidth = 0;
    private int imageHeight = 0;
    private byte[] imageBuffer = null;

    public JOGLTexture()
    {
        // Loads the image we are going to use in this example.
        loadImage(nonSquareImageFileName);
        
        // Specify the Frame window title and initial size.
        setTitle(&quot;gluScaleImage bug&quot;);

        // Create a listener object that will cause the application
        // to exit when the user dismisses the Frame window.
        this.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });   

        // Use the default capabilities.
        GLCapabilities capabilities = new GLCapabilities();

        GLCanvas canvas = new GLCanvas(capabilities);
        canvas.addGLEventListener(this);
            
        this.add(canvas);
    }
    
    /**
     * Loads the specified image from file.
     * @param fileName The string filename for the image.
     */
    private void loadImage(String fileName)
    {   
        File input = new File(fileName);
        Image image = null;
        try
        {
            image = ImageIO.read(input);
        }
        catch (Throwable e)
        {
            System.out.println(&quot;Failed to load image file: &quot; + e.getMessage());
        }
        
        ImageProducer imageSource = image.getSource();
        imageSource.startProduction(this);
    }
    
    
    /**
     * Gets a new width and height based on a power of 2.
     * @param width The original image width
     * @param height The original image height
     * @return An in array with two values. The zeroth element containing the 
new width and the first
     * element the new height.
     */
    private int[] newImageSize(int width, int height) 
    {        
        int nN=1;
        while((width &gt;&gt; nN)&gt;0) {
            nN++;
        }
        width = (width == (1&lt;&lt;(nN-1))) ? width : (1&lt;&lt;nN);

        nN = 1;
        while((height &gt;&gt; nN)&gt;0) {
            nN++;
        }

        height = (height == (1&lt;&lt;(nN-1))) ? height : (1&lt;&lt;nN);

        int[] newDims = new int[2];
        newDims[0] = width;
        newDims[1] = height;
       
        return newDims;
    }

    /**
     * Gets a new texture name
     * @param gl The gl context to get the name from.
     * @return An int value containing the texture name.
     */
    private int getTextureName(GL gl)
    {
        int[] result = new int[1];
        gl.glGenTextures(1, result, 0);
        return result[0];
    }
    
    /**
     * Loads an image into opengl to be used as a texture.
     * @param gl The gl context into which to load the texture
     * @param width The width of the image.
     * @param height The height of the image.
     * @param texture The image.
     */
    private int loadTexture(GL gl , int width, int height, byte []texture) 
    {
        int nComp  = 4;
        int nAlign = 4;
        
        int textureName =  getTextureName(gl);
        
        int[] newDims = newImageSize(width, height);        
        int[] nOldAlign = new int[1];
        gl.glGetIntegerv(GL.GL_UNPACK_ALIGNMENT, nOldAlign,0);
        gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, nAlign);
        
        gl.glBindTexture(GL.GL_TEXTURE_2D, textureName);
        gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, 
GL.GL_REPEAT);
        gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, 
GL.GL_LINEAR);
        gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, 
GL.GL_LINEAR);
        gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE);
        gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, 
GL.GL_REPEAT);
        
        int nSize = nComp*(int) newDims[0] * newDims[1];
        byte[] newTexture = new byte [nSize];
        
        ByteBuffer bufferIn  = ByteBuffer.wrap(texture);
        ByteBuffer bufferOut = ByteBuffer.wrap(newTexture);        
       
        glu.gluScaleImage(GL.GL_RGBA, width,  height,
                GL.GL_UNSIGNED_BYTE, bufferIn, newDims[0],  newDims[1],
                GL.GL_UNSIGNED_BYTE, bufferOut);
        
        gl.glBindTexture(GL.GL_TEXTURE_2D, textureName);

        ByteBuffer pixelBuffer = ByteBuffer.wrap(newTexture);
        gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, nComp, newDims[0],  newDims[1],
                0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, pixelBuffer);
        
        gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, nOldAlign[0]);
        
        return textureName;
    }
    
    /**
     * Implementation of GLEventListener.display
     * Draws a simple textured quad. 
     */
    public void display(GLAutoDrawable arg0)
    {
        GL gl = arg0.getGL();
        
        Color col = Color.white;
        
        float red   = col.getRed()/255.0f;
        float green = col.getGreen()/255.0f;
        float blue  = col.getBlue()/255.0f;
        
        gl.glColor3f(red, green, blue);
                
        gl.glEnable(GL.GL_TEXTURE_2D);   
        gl.glBindTexture(GL.GL_TEXTURE_2D, textureName);
        
        gl.glBegin(GL.GL_QUADS);
        
        gl.glTexCoord2f(0.0f,1.0f);
        gl.glVertex3f(-1.0f, 1.0f, 0.0f);
 
        gl.glTexCoord2f(1.0f,1.0f);
        gl.glVertex3f(1.0f, 1.0f, 0.0f);
        
        gl.glTexCoord2f(1.0f,0.0f);
        gl.glVertex3f(1.0f, -1.0f, 0.0f);
        
        gl.glTexCoord2f(0.0f,0.0f);
        gl.glVertex3f(-1.0f, -1.0f, 0.0f);
        gl.glEnd();        
    }

    public void init(GLAutoDrawable arg0)
    {
        GL gl = arg0.getGL();
        
        if (imageComplete == false)
            throw new RuntimeException(&quot;Image has not been loaded&quot;);
        
        // Load the texture to be used when displaying the textured quad.
        textureName = loadTexture(gl, imageWidth, imageHeight, imageBuffer);
    }

    public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int 
arg4)
    {    
    }

    public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2)
    {  
    }

    //
    // Implementation of ImageConsumer
    //

    public synchronized final void imageComplete(int status) {
        imageComplete = true;
    }
    
    public synchronized final void setDimensions(int width, int height)
    {
        imageWidth  = width;
        imageHeight = height;
        imageBuffer = new byte[4*width*height];
    }
    
    public synchronized final void setPixels(int x, int y, int w, int h, 
ColorModel model,
        int[] pixels, int off, int scansize) 
    {

        if (w == 0 || h == 0)
            return;

        int srcRowIndex = off;
        int dstRowIndex = ((imageHeight - 1) - y) * imageWidth + x;
        for (int row = 0; row &lt; h; row++) {
            int srcIndex = srcRowIndex;
            int dstIndex = dstRowIndex;
            for (int col = 0; col &lt; w; col++) {
                int pixel = pixels[srcIndex++];
                
                int color = model.getRGB(pixel);
                
                imageBuffer[dstIndex*4 + 0] = (byte) (color &amp; 0x000000ff);
                imageBuffer[dstIndex*4 + 1] = (byte)((color &amp; 0x0000ff00) &gt;&gt; 
8);                               
                imageBuffer[dstIndex*4 + 2] = (byte)((color &amp; 0x00ff0000) &gt;&gt; 
16);    
                imageBuffer[dstIndex*4 + 3] = (byte) 0xff;              
                
                dstIndex++;
            }
            srcRowIndex += scansize;
            dstRowIndex += imageWidth;
        }
    }

    public synchronized final void setPixels(int x, int y, int w, int h, 
ColorModel model,
        byte[] pixels, int off, int scansize) {
        // ignore this version
    }
    
    public synchronized final void setHints(int hintflags) {}
    public synchronized final void setColorModel(ColorModel model) {}
    public synchronized final void setProperties(Hashtable props) {}
    
    /**
     * The main() method is called when the Java Virtual Machine starts up. It
     * just creates and displays an instance of the application.
     */
    public static void main(String args[])
    {
        JOGLTexture app = new JOGLTexture();
        app.pack();
        app.setSize(300, 300);
        app.setVisible(true);
    }
}



---- Additional Comments From alang 2007-04-12 04:03:13 ----

Created an attachment
Example application showing issue




---- Additional Comments From alang 2007-04-12 04:03:59 ----

Created an attachment
Example non sqaure image used by example application




---- Additional Comments From alang 2007-04-17 13:16:21 ----

none



---- Additional Comments From kbr 2007-04-18 00:33:03 ----

This is being investigated. It isn&apos;t necessary to adjust the priority.

If you would like to help figure out what is going on, you can compare the Java
sources for Mipmap.java, Image.java and ScaleImage.java to the relevant C GLU
sources in the OpenGL sample implementation and see if you can find the bug.
This is what we are doing internally.




---- Additional Comments From kbr 2007-04-18 00:33:27 ----

_



---- Additional Comments From kbr 2007-04-18 23:36:09 ----

Conversion scale factors for x and y dimensions were flipped. Also adjusted
Image.fill_image() so code does not assert.

Fix will be present in JOGL nightly builds dated 4/19 and later, and in the
forthcoming 1.1.0-rc4 and 1.1.0 final release.




---- Additional Comments From alang 2007-04-19 08:31:31 ----

Can confirm fix resolves issue for me. Thanks for such a prompt response. 
Regards 
Alan



--- Bug imported by sgothel@jausoft.com 2010-03-24 07:50 EDT  ---

This bug was previously known as _bug_ 292 at https://jogl.dev.java.net/bugs/show_bug.cgi?id=292
Imported an attachment (id=98)
Imported an attachment (id=99)

The original submitter of attachment 98 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.
The original submitter of attachment 99 is unknown.
   Reassigning to the person who moved it here: sgothel@jausoft.com.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>98</attachid>
            <date>2007-04-12 04:03:00 +0200</date>
            <delta_ts>2007-04-12 04:03:00 +0200</delta_ts>
            <desc>Example application showing issue</desc>
            <filename>JOGLTexture.java</filename>
            <type>text/plain</type>
            <size>9961</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">aW1wb3J0IGphdmEuYXd0Lio7DQppbXBvcnQgamF2YS5hd3QuZXZlbnQuKjsNCmltcG9ydCBqYXZh
LmF3dC5pbWFnZS4qOw0KaW1wb3J0IGphdmEuaW8uKjsNCmltcG9ydCBqYXZhLm5pby4qOw0KaW1w
b3J0IGphdmEudXRpbC4qOw0KDQppbXBvcnQgamF2YXguaW1hZ2Vpby4qOw0KaW1wb3J0IGphdmF4
Lm1lZGlhLm9wZW5nbC4qOw0KaW1wb3J0IGphdmF4Lm1lZGlhLm9wZW5nbC5nbHUuKjsNCg0KLyoq
DQogKiBFeGFtcGxlIEpPR0wgYXBwbGljYXRpb24gc2hvd2luZyBidWcgd2hlbiB1c2luZyBnbHVT
Y2FsZUltYWdlLiBUaGUgYXBwbGljYXRpb24NCiAqIHNpbXBseSBkaXNwbGF5cyBhIHF1YWQgd2l0
aCBhIHRleHR1cmUgbWFwLiBMb2FkIGFueSBub24gc3F1YXJlIGltYWdlLCB0aGUNCiAqIHNhbXBs
ZSBpbmNsdWRlZCBpcyAxMzR4NTcuIFJ1biB0aGUgYXBwbGljYXRpb24gd2l0aCBhbmQgd2l0aG91
dCB0aGUgZm9sbG93aW5nDQogKiBKVk0gY29tbWFuZCBsaW5lIGFyZ3VtZW50Og0KICogDQogKiAt
RGpvZ2wuZ2x1Lm5vamF2YQ0KICogDQogKiBXaGVuIHRoZSBhcHBsaWNhdGlvbiBpcyByYW4gKndp
dGgqIHRoaXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50IHRoZSB0ZXh0dXJlIGlzDQogKiBkaXNwbGF5
ZWQgY29ycmVjdGx5LiBXaGVuIHRoZSBhcHBsaWNhdGlvbiBpcyByYW4gd2l0aG91dCB0aGUgdGV4
dHVyZSBpcyBub3QNCiAqIHNjYWxlZCBjb3JyZWN0bHkuIA0KICogDQogKiBSdW4gZW52aXJvbm1l
bnQ6IA0KICogTWFjaGluZSAgOiBEZWxsIFByZWNpc2lvbiBNNzAgbGFwdG9wDQogKiBPUyAgICAg
ICA6IFdpbmRvd3MgWFAgU1AyDQogKiBHcmFwaGljcyA6IE5WSURJQSBRdWFkcm8gRlggR28xNDAw
DQogKiBEcml2ZXJzICA6IGxhc3Rlc3QgZnJvbSBERUxMIGRhdGVkOiAyMi8wMy8yMDA2IHZlci4g
OC40LjMuMA0KICogSlZNICAgICAgOiBqMnNkazEuNC4yXzEwDQogKiBKT0dMICAgICA6IHJlbGVh
c2UgMS4xLjAtcmMzIGZyb20gRmViIDE0IDIwMDcNCiAqIA0KICogQGF1dGhvciBBbGFuIE1pY2hh
ZWwgR2F5LCBBVlMgSW5jLg0KICovDQpwdWJsaWMgY2xhc3MgSk9HTFRleHR1cmUgZXh0ZW5kcyBG
cmFtZSBpbXBsZW1lbnRzIEdMRXZlbnRMaXN0ZW5lciwgSW1hZ2VDb25zdW1lcg0Kew0KICAgIC8v
IE5hbWUgb2YgZXhhbXBsZSBtYWdlIGZpbGUgdG8gbG9hZA0KICAgIFN0cmluZyBub25TcXVhcmVJ
bWFnZUZpbGVOYW1lID0gIi5cXG5vbi1zcXVhcmVpbWFnZS5qcGciOw0KICAgIA0KICAgIC8vDQog
ICAgLy8gT3BlbkdMIHZhcmlhYmxlcy4NCiAgICAvLw0KICAgIHByaXZhdGUgR0xVIGdsdSA9IG5l
dyBHTFUoKTsgIA0KICAgIHByaXZhdGUgaW50IHRleHR1cmVOYW1lOw0KDQogICAgLy8NCiAgICAv
LyBXb3Jrc3BhY2UgdmFyaWFibGVzIGZvciBjb25zdW1pbmcgaW1hZ2UuDQogICAgLy8NCiAgICBi
b29sZWFuIGltYWdlQ29tcGxldGUgPSBmYWxzZTsgICAgDQogICAgcHJpdmF0ZSBpbnQgaW1hZ2VX
aWR0aCA9IDA7DQogICAgcHJpdmF0ZSBpbnQgaW1hZ2VIZWlnaHQgPSAwOw0KICAgIHByaXZhdGUg
Ynl0ZVtdIGltYWdlQnVmZmVyID0gbnVsbDsNCg0KICAgIHB1YmxpYyBKT0dMVGV4dHVyZSgpDQog
ICAgew0KICAgICAgICAvLyBMb2FkcyB0aGUgaW1hZ2Ugd2UgYXJlIGdvaW5nIHRvIHVzZSBpbiB0
aGlzIGV4YW1wbGUuDQogICAgICAgIGxvYWRJbWFnZShub25TcXVhcmVJbWFnZUZpbGVOYW1lKTsN
CiAgICAgICAgDQogICAgICAgIC8vIFNwZWNpZnkgdGhlIEZyYW1lIHdpbmRvdyB0aXRsZSBhbmQg
aW5pdGlhbCBzaXplLg0KICAgICAgICBzZXRUaXRsZSgiZ2x1U2NhbGVJbWFnZSBidWciKTsNCg0K
ICAgICAgICAvLyBDcmVhdGUgYSBsaXN0ZW5lciBvYmplY3QgdGhhdCB3aWxsIGNhdXNlIHRoZSBh
cHBsaWNhdGlvbg0KICAgICAgICAvLyB0byBleGl0IHdoZW4gdGhlIHVzZXIgZGlzbWlzc2VzIHRo
ZSBGcmFtZSB3aW5kb3cuDQogICAgICAgIHRoaXMuYWRkV2luZG93TGlzdGVuZXIobmV3IFdpbmRv
d0FkYXB0ZXIoKQ0KICAgICAgICB7DQogICAgICAgICAgICBwdWJsaWMgdm9pZCB3aW5kb3dDbG9z
aW5nKFdpbmRvd0V2ZW50IGUpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgU3lzdGVt
LmV4aXQoMCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0pOyAgIA0KDQogICAgICAgIC8vIFVz
ZSB0aGUgZGVmYXVsdCBjYXBhYmlsaXRpZXMuDQogICAgICAgIEdMQ2FwYWJpbGl0aWVzIGNhcGFi
aWxpdGllcyA9IG5ldyBHTENhcGFiaWxpdGllcygpOw0KDQogICAgICAgIEdMQ2FudmFzIGNhbnZh
cyA9IG5ldyBHTENhbnZhcyhjYXBhYmlsaXRpZXMpOw0KICAgICAgICBjYW52YXMuYWRkR0xFdmVu
dExpc3RlbmVyKHRoaXMpOw0KICAgICAgICAgICAgDQogICAgICAgIHRoaXMuYWRkKGNhbnZhcyk7
DQogICAgfQ0KICAgIA0KICAgIC8qKg0KICAgICAqIExvYWRzIHRoZSBzcGVjaWZpZWQgaW1hZ2Ug
ZnJvbSBmaWxlLg0KICAgICAqIEBwYXJhbSBmaWxlTmFtZSBUaGUgc3RyaW5nIGZpbGVuYW1lIGZv
ciB0aGUgaW1hZ2UuDQogICAgICovDQogICAgcHJpdmF0ZSB2b2lkIGxvYWRJbWFnZShTdHJpbmcg
ZmlsZU5hbWUpDQogICAgeyAgIA0KICAgICAgICBGaWxlIGlucHV0ID0gbmV3IEZpbGUoZmlsZU5h
bWUpOw0KICAgICAgICBJbWFnZSBpbWFnZSA9IG51bGw7DQogICAgICAgIHRyeQ0KICAgICAgICB7
DQogICAgICAgICAgICBpbWFnZSA9IEltYWdlSU8ucmVhZChpbnB1dCk7DQogICAgICAgIH0NCiAg
ICAgICAgY2F0Y2ggKFRocm93YWJsZSBlKQ0KICAgICAgICB7DQogICAgICAgICAgICBTeXN0ZW0u
b3V0LnByaW50bG4oIkZhaWxlZCB0byBsb2FkIGltYWdlIGZpbGU6ICIgKyBlLmdldE1lc3NhZ2Uo
KSk7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIEltYWdlUHJvZHVjZXIgaW1hZ2VTb3Vy
Y2UgPSBpbWFnZS5nZXRTb3VyY2UoKTsNCiAgICAgICAgaW1hZ2VTb3VyY2Uuc3RhcnRQcm9kdWN0
aW9uKHRoaXMpOw0KICAgIH0NCiAgICANCiAgICANCiAgICAvKioNCiAgICAgKiBHZXRzIGEgbmV3
IHdpZHRoIGFuZCBoZWlnaHQgYmFzZWQgb24gYSBwb3dlciBvZiAyLg0KICAgICAqIEBwYXJhbSB3
aWR0aCBUaGUgb3JpZ2luYWwgaW1hZ2Ugd2lkdGgNCiAgICAgKiBAcGFyYW0gaGVpZ2h0IFRoZSBv
cmlnaW5hbCBpbWFnZSBoZWlnaHQNCiAgICAgKiBAcmV0dXJuIEFuIGluIGFycmF5IHdpdGggdHdv
IHZhbHVlcy4gVGhlIHplcm90aCBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIG5ldyB3aWR0aCBhbmQg
dGhlIGZpcnN0DQogICAgICogZWxlbWVudCB0aGUgbmV3IGhlaWdodC4NCiAgICAgKi8NCiAgICBw
cml2YXRlIGludFtdIG5ld0ltYWdlU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIA0KICAgIHsg
ICAgICAgIA0KICAgICAgICBpbnQgbk49MTsNCiAgICAgICAgd2hpbGUoKHdpZHRoID4+IG5OKT4w
KSB7DQogICAgICAgICAgICBuTisrOw0KICAgICAgICB9DQogICAgICAgIHdpZHRoID0gKHdpZHRo
ID09ICgxPDwobk4tMSkpKSA/IHdpZHRoIDogKDE8PG5OKTsNCg0KICAgICAgICBuTiA9IDE7DQog
ICAgICAgIHdoaWxlKChoZWlnaHQgPj4gbk4pPjApIHsNCiAgICAgICAgICAgIG5OKys7DQogICAg
ICAgIH0NCg0KICAgICAgICBoZWlnaHQgPSAoaGVpZ2h0ID09ICgxPDwobk4tMSkpKSA/IGhlaWdo
dCA6ICgxPDxuTik7DQoNCiAgICAgICAgaW50W10gbmV3RGltcyA9IG5ldyBpbnRbMl07DQogICAg
ICAgIG5ld0RpbXNbMF0gPSB3aWR0aDsNCiAgICAgICAgbmV3RGltc1sxXSA9IGhlaWdodDsNCiAg
ICAgICANCiAgICAgICAgcmV0dXJuIG5ld0RpbXM7DQogICAgfQ0KDQogICAgLyoqDQogICAgICog
R2V0cyBhIG5ldyB0ZXh0dXJlIG5hbWUNCiAgICAgKiBAcGFyYW0gZ2wgVGhlIGdsIGNvbnRleHQg
dG8gZ2V0IHRoZSBuYW1lIGZyb20uDQogICAgICogQHJldHVybiBBbiBpbnQgdmFsdWUgY29udGFp
bmluZyB0aGUgdGV4dHVyZSBuYW1lLg0KICAgICAqLw0KICAgIHByaXZhdGUgaW50IGdldFRleHR1
cmVOYW1lKEdMIGdsKQ0KICAgIHsNCiAgICAgICAgaW50W10gcmVzdWx0ID0gbmV3IGludFsxXTsN
CiAgICAgICAgZ2wuZ2xHZW5UZXh0dXJlcygxLCByZXN1bHQsIDApOw0KICAgICAgICByZXR1cm4g
cmVzdWx0WzBdOw0KICAgIH0NCiAgICANCiAgICAvKioNCiAgICAgKiBMb2FkcyBhbiBpbWFnZSBp
bnRvIG9wZW5nbCB0byBiZSB1c2VkIGFzIGEgdGV4dHVyZS4NCiAgICAgKiBAcGFyYW0gZ2wgVGhl
IGdsIGNvbnRleHQgaW50byB3aGljaCB0byBsb2FkIHRoZSB0ZXh0dXJlDQogICAgICogQHBhcmFt
IHdpZHRoIFRoZSB3aWR0aCBvZiB0aGUgaW1hZ2UuDQogICAgICogQHBhcmFtIGhlaWdodCBUaGUg
aGVpZ2h0IG9mIHRoZSBpbWFnZS4NCiAgICAgKiBAcGFyYW0gdGV4dHVyZSBUaGUgaW1hZ2UuDQog
ICAgICovDQogICAgcHJpdmF0ZSBpbnQgbG9hZFRleHR1cmUoR0wgZ2wgLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIGJ5dGUgW110ZXh0dXJlKSANCiAgICB7DQogICAgICAgIGludCBuQ29tcCAgPSA0
Ow0KICAgICAgICBpbnQgbkFsaWduID0gNDsNCiAgICAgICAgDQogICAgICAgIGludCB0ZXh0dXJl
TmFtZSA9ICBnZXRUZXh0dXJlTmFtZShnbCk7DQogICAgICAgIA0KICAgICAgICBpbnRbXSBuZXdE
aW1zID0gbmV3SW1hZ2VTaXplKHdpZHRoLCBoZWlnaHQpOyAgICAgICAgDQogICAgICAgIGludFtd
IG5PbGRBbGlnbiA9IG5ldyBpbnRbMV07DQogICAgICAgIGdsLmdsR2V0SW50ZWdlcnYoR0wuR0xf
VU5QQUNLX0FMSUdOTUVOVCwgbk9sZEFsaWduLDApOw0KICAgICAgICBnbC5nbFBpeGVsU3RvcmVp
KEdMLkdMX1VOUEFDS19BTElHTk1FTlQsIG5BbGlnbik7DQogICAgICAgIA0KICAgICAgICBnbC5n
bEJpbmRUZXh0dXJlKEdMLkdMX1RFWFRVUkVfMkQsIHRleHR1cmVOYW1lKTsNCiAgICAgICAgZ2wu
Z2xUZXhQYXJhbWV0ZXJpKEdMLkdMX1RFWFRVUkVfMkQsIEdMLkdMX1RFWFRVUkVfV1JBUF9TLCBH
TC5HTF9SRVBFQVQpOw0KICAgICAgICBnbC5nbFRleFBhcmFtZXRlcmkoR0wuR0xfVEVYVFVSRV8y
RCwgR0wuR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTC5HTF9MSU5FQVIpOw0KICAgICAgICBnbC5n
bFRleFBhcmFtZXRlcmkoR0wuR0xfVEVYVFVSRV8yRCwgR0wuR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTC5HTF9MSU5FQVIpOw0KICAgICAgICBnbC5nbFRleEVudmkoR0wuR0xfVEVYVFVSRV9FTlYs
IEdMLkdMX1RFWFRVUkVfRU5WX01PREUsIEdMLkdMX01PRFVMQVRFKTsNCiAgICAgICAgZ2wuZ2xU
ZXhQYXJhbWV0ZXJpKEdMLkdMX1RFWFRVUkVfMkQsIEdMLkdMX1RFWFRVUkVfV1JBUF9ULCBHTC5H
TF9SRVBFQVQpOw0KICAgICAgICANCiAgICAgICAgaW50IG5TaXplID0gbkNvbXAqKGludCkgbmV3
RGltc1swXSAqIG5ld0RpbXNbMV07DQogICAgICAgIGJ5dGVbXSBuZXdUZXh0dXJlID0gbmV3IGJ5
dGUgW25TaXplXTsNCiAgICAgICAgDQogICAgICAgIEJ5dGVCdWZmZXIgYnVmZmVySW4gID0gQnl0
ZUJ1ZmZlci53cmFwKHRleHR1cmUpOw0KICAgICAgICBCeXRlQnVmZmVyIGJ1ZmZlck91dCA9IEJ5
dGVCdWZmZXIud3JhcChuZXdUZXh0dXJlKTsgICAgICAgIA0KICAgICAgIA0KICAgICAgICBnbHUu
Z2x1U2NhbGVJbWFnZShHTC5HTF9SR0JBLCB3aWR0aCwgIGhlaWdodCwNCiAgICAgICAgICAgICAg
ICBHTC5HTF9VTlNJR05FRF9CWVRFLCBidWZmZXJJbiwgbmV3RGltc1swXSwgIG5ld0RpbXNbMV0s
DQogICAgICAgICAgICAgICAgR0wuR0xfVU5TSUdORURfQllURSwgYnVmZmVyT3V0KTsNCiAgICAg
ICAgDQogICAgICAgIGdsLmdsQmluZFRleHR1cmUoR0wuR0xfVEVYVFVSRV8yRCwgdGV4dHVyZU5h
bWUpOw0KDQogICAgICAgIEJ5dGVCdWZmZXIgcGl4ZWxCdWZmZXIgPSBCeXRlQnVmZmVyLndyYXAo
bmV3VGV4dHVyZSk7DQogICAgICAgIGdsLmdsVGV4SW1hZ2UyRChHTC5HTF9URVhUVVJFXzJELCAw
LCBuQ29tcCwgbmV3RGltc1swXSwgIG5ld0RpbXNbMV0sDQogICAgICAgICAgICAgICAgMCwgR0wu
R0xfUkdCQSwgR0wuR0xfVU5TSUdORURfQllURSwgcGl4ZWxCdWZmZXIpOw0KICAgICAgICANCiAg
ICAgICAgZ2wuZ2xQaXhlbFN0b3JlaShHTC5HTF9VTlBBQ0tfQUxJR05NRU5ULCBuT2xkQWxpZ25b
MF0pOw0KICAgICAgICANCiAgICAgICAgcmV0dXJuIHRleHR1cmVOYW1lOw0KICAgIH0NCiAgICAN
CiAgICAvKioNCiAgICAgKiBJbXBsZW1lbnRhdGlvbiBvZiBHTEV2ZW50TGlzdGVuZXIuZGlzcGxh
eQ0KICAgICAqIERyYXdzIGEgc2ltcGxlIHRleHR1cmVkIHF1YWQuIA0KICAgICAqLw0KICAgIHB1
YmxpYyB2b2lkIGRpc3BsYXkoR0xBdXRvRHJhd2FibGUgYXJnMCkNCiAgICB7DQogICAgICAgIEdM
IGdsID0gYXJnMC5nZXRHTCgpOw0KICAgICAgICANCiAgICAgICAgQ29sb3IgY29sID0gQ29sb3Iu
d2hpdGU7DQogICAgICAgIA0KICAgICAgICBmbG9hdCByZWQgICA9IGNvbC5nZXRSZWQoKS8yNTUu
MGY7DQogICAgICAgIGZsb2F0IGdyZWVuID0gY29sLmdldEdyZWVuKCkvMjU1LjBmOw0KICAgICAg
ICBmbG9hdCBibHVlICA9IGNvbC5nZXRCbHVlKCkvMjU1LjBmOw0KICAgICAgICANCiAgICAgICAg
Z2wuZ2xDb2xvcjNmKHJlZCwgZ3JlZW4sIGJsdWUpOw0KICAgICAgICAgICAgICAgIA0KICAgICAg
ICBnbC5nbEVuYWJsZShHTC5HTF9URVhUVVJFXzJEKTsgICANCiAgICAgICAgZ2wuZ2xCaW5kVGV4
dHVyZShHTC5HTF9URVhUVVJFXzJELCB0ZXh0dXJlTmFtZSk7DQogICAgICAgIA0KICAgICAgICBn
bC5nbEJlZ2luKEdMLkdMX1FVQURTKTsNCiAgICAgICAgDQogICAgICAgIGdsLmdsVGV4Q29vcmQy
ZigwLjBmLDEuMGYpOw0KICAgICAgICBnbC5nbFZlcnRleDNmKC0xLjBmLCAxLjBmLCAwLjBmKTsN
CiANCiAgICAgICAgZ2wuZ2xUZXhDb29yZDJmKDEuMGYsMS4wZik7DQogICAgICAgIGdsLmdsVmVy
dGV4M2YoMS4wZiwgMS4wZiwgMC4wZik7DQogICAgICAgIA0KICAgICAgICBnbC5nbFRleENvb3Jk
MmYoMS4wZiwwLjBmKTsNCiAgICAgICAgZ2wuZ2xWZXJ0ZXgzZigxLjBmLCAtMS4wZiwgMC4wZik7
DQogICAgICAgIA0KICAgICAgICBnbC5nbFRleENvb3JkMmYoMC4wZiwwLjBmKTsNCiAgICAgICAg
Z2wuZ2xWZXJ0ZXgzZigtMS4wZiwgLTEuMGYsIDAuMGYpOw0KICAgICAgICBnbC5nbEVuZCgpOyAg
ICAgICAgDQogICAgfQ0KDQogICAgcHVibGljIHZvaWQgaW5pdChHTEF1dG9EcmF3YWJsZSBhcmcw
KQ0KICAgIHsNCiAgICAgICAgR0wgZ2wgPSBhcmcwLmdldEdMKCk7DQogICAgICAgIA0KICAgICAg
ICBpZiAoaW1hZ2VDb21wbGV0ZSA9PSBmYWxzZSkNCiAgICAgICAgICAgIHRocm93IG5ldyBSdW50
aW1lRXhjZXB0aW9uKCJJbWFnZSBoYXMgbm90IGJlZW4gbG9hZGVkIik7DQogICAgICAgIA0KICAg
ICAgICAvLyBMb2FkIHRoZSB0ZXh0dXJlIHRvIGJlIHVzZWQgd2hlbiBkaXNwbGF5aW5nIHRoZSB0
ZXh0dXJlZCBxdWFkLg0KICAgICAgICB0ZXh0dXJlTmFtZSA9IGxvYWRUZXh0dXJlKGdsLCBpbWFn
ZVdpZHRoLCBpbWFnZUhlaWdodCwgaW1hZ2VCdWZmZXIpOw0KICAgIH0NCg0KICAgIHB1YmxpYyB2
b2lkIHJlc2hhcGUoR0xBdXRvRHJhd2FibGUgYXJnMCwgaW50IGFyZzEsIGludCBhcmcyLCBpbnQg
YXJnMywgaW50IGFyZzQpDQogICAgeyAgICANCiAgICB9DQoNCiAgICBwdWJsaWMgdm9pZCBkaXNw
bGF5Q2hhbmdlZChHTEF1dG9EcmF3YWJsZSBhcmcwLCBib29sZWFuIGFyZzEsIGJvb2xlYW4gYXJn
MikNCiAgICB7ICANCiAgICB9DQoNCiAgICAvLw0KICAgIC8vIEltcGxlbWVudGF0aW9uIG9mIElt
YWdlQ29uc3VtZXINCiAgICAvLw0KDQogICAgcHVibGljIHN5bmNocm9uaXplZCBmaW5hbCB2b2lk
IGltYWdlQ29tcGxldGUoaW50IHN0YXR1cykgew0KICAgICAgICBpbWFnZUNvbXBsZXRlID0gdHJ1
ZTsNCiAgICB9DQogICAgDQogICAgcHVibGljIHN5bmNocm9uaXplZCBmaW5hbCB2b2lkIHNldERp
bWVuc2lvbnMoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQ0KICAgIHsNCiAgICAgICAgaW1hZ2VXaWR0
aCAgPSB3aWR0aDsNCiAgICAgICAgaW1hZ2VIZWlnaHQgPSBoZWlnaHQ7DQogICAgICAgIGltYWdl
QnVmZmVyID0gbmV3IGJ5dGVbNCp3aWR0aCpoZWlnaHRdOw0KICAgIH0NCiAgICANCiAgICBwdWJs
aWMgc3luY2hyb25pemVkIGZpbmFsIHZvaWQgc2V0UGl4ZWxzKGludCB4LCBpbnQgeSwgaW50IHcs
IGludCBoLCBDb2xvck1vZGVsIG1vZGVsLA0KICAgICAgICBpbnRbXSBwaXhlbHMsIGludCBvZmYs
IGludCBzY2Fuc2l6ZSkgDQogICAgew0KDQogICAgICAgIGlmICh3ID09IDAgfHwgaCA9PSAwKQ0K
ICAgICAgICAgICAgcmV0dXJuOw0KDQogICAgICAgIGludCBzcmNSb3dJbmRleCA9IG9mZjsNCiAg
ICAgICAgaW50IGRzdFJvd0luZGV4ID0gKChpbWFnZUhlaWdodCAtIDEpIC0geSkgKiBpbWFnZVdp
ZHRoICsgeDsNCiAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaDsgcm93KyspIHsNCiAg
ICAgICAgICAgIGludCBzcmNJbmRleCA9IHNyY1Jvd0luZGV4Ow0KICAgICAgICAgICAgaW50IGRz
dEluZGV4ID0gZHN0Um93SW5kZXg7DQogICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wg
PCB3OyBjb2wrKykgew0KICAgICAgICAgICAgICAgIGludCBwaXhlbCA9IHBpeGVsc1tzcmNJbmRl
eCsrXTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpbnQgY29sb3IgPSBtb2Rl
bC5nZXRSR0IocGl4ZWwpOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGltYWdl
QnVmZmVyW2RzdEluZGV4KjQgKyAwXSA9IChieXRlKSAoY29sb3IgJiAweDAwMDAwMGZmKTsNCiAg
ICAgICAgICAgICAgICBpbWFnZUJ1ZmZlcltkc3RJbmRleCo0ICsgMV0gPSAoYnl0ZSkoKGNvbG9y
ICYgMHgwMDAwZmYwMCkgPj4gOCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAg
ICAgICAgICAgICAgIGltYWdlQnVmZmVyW2RzdEluZGV4KjQgKyAyXSA9IChieXRlKSgoY29sb3Ig
JiAweDAwZmYwMDAwKSA+PiAxNik7ICAgIA0KICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyW2Rz
dEluZGV4KjQgKyAzXSA9IChieXRlKSAweGZmOyAgICAgICAgICAgICAgDQogICAgICAgICAgICAg
ICAgDQogICAgICAgICAgICAgICAgZHN0SW5kZXgrKzsNCiAgICAgICAgICAgIH0NCiAgICAgICAg
ICAgIHNyY1Jvd0luZGV4ICs9IHNjYW5zaXplOw0KICAgICAgICAgICAgZHN0Um93SW5kZXggKz0g
aW1hZ2VXaWR0aDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQg
ZmluYWwgdm9pZCBzZXRQaXhlbHMoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIENvbG9yTW9k
ZWwgbW9kZWwsDQogICAgICAgIGJ5dGVbXSBwaXhlbHMsIGludCBvZmYsIGludCBzY2Fuc2l6ZSkg
ew0KICAgICAgICAvLyBpZ25vcmUgdGhpcyB2ZXJzaW9uDQogICAgfQ0KICAgIA0KICAgIHB1Ymxp
YyBzeW5jaHJvbml6ZWQgZmluYWwgdm9pZCBzZXRIaW50cyhpbnQgaGludGZsYWdzKSB7fQ0KICAg
IHB1YmxpYyBzeW5jaHJvbml6ZWQgZmluYWwgdm9pZCBzZXRDb2xvck1vZGVsKENvbG9yTW9kZWwg
bW9kZWwpIHt9DQogICAgcHVibGljIHN5bmNocm9uaXplZCBmaW5hbCB2b2lkIHNldFByb3BlcnRp
ZXMoSGFzaHRhYmxlIHByb3BzKSB7fQ0KICAgIA0KICAgIC8qKg0KICAgICAqIFRoZSBtYWluKCkg
bWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBKYXZhIFZpcnR1YWwgTWFjaGluZSBzdGFydHMgdXAu
IEl0DQogICAgICoganVzdCBjcmVhdGVzIGFuZCBkaXNwbGF5cyBhbiBpbnN0YW5jZSBvZiB0aGUg
YXBwbGljYXRpb24uDQogICAgICovDQogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5n
IGFyZ3NbXSkNCiAgICB7DQogICAgICAgIEpPR0xUZXh0dXJlIGFwcCA9IG5ldyBKT0dMVGV4dHVy
ZSgpOw0KICAgICAgICBhcHAucGFjaygpOw0KICAgICAgICBhcHAuc2V0U2l6ZSgzMDAsIDMwMCk7
DQogICAgICAgIGFwcC5zZXRWaXNpYmxlKHRydWUpOw0KICAgIH0NCn0NCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>99</attachid>
            <date>2007-04-12 04:03:00 +0200</date>
            <delta_ts>2007-04-12 04:03:00 +0200</delta_ts>
            <desc>Example non sqaure image used by example application</desc>
            <filename>non-squareimage.jpg</filename>
            <type>image/jpeg</type>
            <size>2885</size>
            <attacher name="Sven Gothel">sgothel</attacher>
            
              <data encoding="base64">/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAd
Hx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5Ojf/2wBDAQoKCg0MDRoPDxo3JR8lNzc3Nzc3
Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzf/wAARCAA5AIYDASIA
AhEBAxEB/8QAHAAAAgIDAQEAAAAAAAAAAAAABgcABAEDBQII/8QASBAAAQIFAgIEBg4HCQEAAAAA
AQIDAAQFBhEHEiExE1FhgRQiQXF1sQgVFjI0NjdCkZShs8LSIzhXcoKEwyQzNVNWdIOSstP/xAAU
AQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8A7121
O7JzUxFt27XE01lUgJjx5dDgyCc80k8eEWfc1qb/AK6lfqCPyRqe+X9j0MfWqCTU+u+56yKnOIXt
fW30DGDg71+KCPMCVd0AOe0Wo/7QJD6m3+WNnua1N/11K/UEfkj5nzH1jpPXfb+xac+te6Yl0eDP
8cncjgCe0p2nvgOGqgakJOFX/IgjmDJN/ljHtFqP+0CQ+pt/lhMas/KLXP8AcD/ymMUvTi7atS2a
nTqT08o8ne2sPtAqGSORVnydUA7BbephGRfUoR1iQR+SPC7f1JQcLv6SSeoyTY/DCGty46xadXRM
SMw+wplzD0uVEJcAPFC08usdnngr17WHL86RPJUkyRkdeYBnJoGpKzhF/SSj1CSbP4Yyu3tSkY33
7Jpzy3SLY/DCV0pqHtbqFRHicJcmOgV/yAo9ahBf7I2o9Pc9Op6SCmVlN5HUpajn7EJgDoUHUckA
X/IknkBJt/liKoGpCDtXf0kk9Rkmx+GEJZHxzoPL/Epf7xMEWuPylVP9xj7pEA2vc/qTs3+72S28
t3gTePp2xhNA1IUdqb+klE+QSTZ/DAGn9XdXL/Ef6ghZUepzNHqsrUpJeyYlnUuIPkyDyPYeR7DA
fRarc1LQMqvuUSOsyLY/DHlNv6krOEX9JKPUJJs/hjGp9Ylq/o0/VZI5Zmky6wOZSelTlJ7Qcg+a
Ft7H34//AMk760wDX0erlYrdLqxrs94ZMSlQVLpc6NKPFSkeRIHlzEijoZ8AuT0y76hEgMPfL+x6
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
</data>

          </attachment>
      

    </bug>

</bugzilla>