You can use below patch:<br><br>Index: lib/OpenLayers/Layer/Image.js<br>===================================================================<br>--- lib/OpenLayers/Layer/Image.js&nbsp;&nbsp;&nbsp; (revision 8489)<br>+++ lib/OpenLayers/Layer/Image.js&nbsp;&nbsp;&nbsp; (working copy)<br>
@@ -47,13 +47,6 @@<br>&nbsp;&nbsp;&nbsp;&nbsp; tile: null,<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; /**<br>-&nbsp;&nbsp;&nbsp;&nbsp; * Property: aspectRatio<br>-&nbsp;&nbsp;&nbsp;&nbsp; * {Float} The ratio of height/width represented by a single pixel in the<br>-&nbsp;&nbsp;&nbsp;&nbsp; * graphic<br>-&nbsp;&nbsp;&nbsp;&nbsp; */<br>-&nbsp;&nbsp;&nbsp; aspectRatio: null,<br>
-<br>-&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Constructor: OpenLayers.Layer.Image<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Create a new image layer<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br>@@ -69,9 +62,6 @@<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.extent = extent;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.size = size;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OpenLayers.Layer.prototype.initialize.apply(this, [name, options]);<br>
-<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.aspectRatio = (this.extent.getHeight() / this.size.h) /<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (this.extent.getWidth() / this.size.w);<br>&nbsp;&nbsp;&nbsp;&nbsp; },&nbsp;&nbsp;&nbsp; <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; /**<br>@@ -128,9 +118,9 @@<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * image will be stretched in one dimension only.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if( this.options.maxResolution == null ) {<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.options.maxResolution = this.aspectRatio *<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.extent.getWidth() /<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.size.w;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var wRes = this.extent.getWidth() / this.size.w;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var hRes = this.extent.getHeight() / this.size.h;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.options.maxResolution = Math.min(wRes, hRes);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OpenLayers.Layer.prototype.setMap.apply(this, arguments);<br>
&nbsp;&nbsp;&nbsp;&nbsp; },<br>@@ -155,8 +145,10 @@<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.setTileSize();<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //determine new position (upper left corner of new bounds)<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var ul = new OpenLayers.LonLat(this.extent.left, this.extent.top);<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var ulPx = this.map.getLayerPxFromLonLat(ul);<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var center = this.extent.getCenterLonLat();<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var centerPx = this.map.getLayerPxFromLonLat(center);<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var ulPx = new OpenLayers.Pixel(centerPx.x - (this.tileSize.w / 2),<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; centerPx.y - (this.tileSize.h / 2));<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(firstRendering) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //create the new tile<br>@@ -175,10 +167,23 @@<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Set the tile size based on the map size.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp;&nbsp; setTileSize: function() {<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var tileWidth = this.extent.getWidth() / this.map.getResolution();<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var tileHeight = this.extent.getHeight() / this.map.getResolution();<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tileSize = new OpenLayers.Size(tileWidth, tileHeight);<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var w = this.extent.getWidth() / this.map.getResolution();<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var h = this.extent.getHeight() / this.map.getResolution();<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tileSize = this.getLockedSize(w, h);<br>&nbsp;&nbsp;&nbsp;&nbsp; },<br>
+&nbsp;&nbsp;&nbsp; <br>+&nbsp;&nbsp;&nbsp; getLockedSize: function(w, h) {<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var tileWidth = w;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var tileHeight = h;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(this.size.h &gt; this.size.w) {<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tileHeight = Math.floor(this.size.h * (w / this.size.w));<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tileWidth = Math.floor(this.size.w * (h / this.size.h));<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new OpenLayers.Size(tileWidth, tileHeight);<br>+&nbsp;&nbsp;&nbsp; },<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; /**<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * APIMethod: setUrl<br>
<br>If this is the right way for the image layer, I will open a ticket for this patch.<br><br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<br>
Hi,<br>
<br>
I&#39;m using OpenLayers to develop a viewing application for medical images. So far I&#39;m just using static images, i.e. I&#39;m using the Image layer, and I&#39;m a bit puzzled as to the interdependence of bounds, extent, resolution and all this stuff. I simply want to fit an image which might be quite high-res into the viewport for a start and then let the users zoom in until the natural resolution of the image is reached. I played with all the parameters but to be honest I still haven&#39;t quite gotten the gist, so even after hours it seems as if I&#39;m not a step further. A hint or short explanation as to how to approach this would be greatly appreciated!<br>

<br>
My code is something like this:<br>
var oMapWest = new OpenLayers.Map(&#39;viewportWest&#39;);<br>
var graphic = new OpenLayers.Layer.Image(<br>
 &nbsp;&#39;City Lights&#39;,<br>
 &nbsp;&#39;images/political_world_map.jpg&#39;, &nbsp;// which is 8000x4000pxs<br>
 &nbsp;new OpenLayers.Bounds(-180, -90, 180, 90),<br>
 &nbsp;new OpenLayers.Size(700, 350),<br>
 &nbsp;{numZoomLevels:10}<br>
);<br>
oMapWest.addLayers([graphic]);<br>
oMapWest.zoomToMaxExtent();<br>
<br>
Thanks!<br>
<br>
Flo<br>
<br>
</blockquote></div><br><br clear="all"><br>-- <br>Li XinGang<br>EMail: <a href="mailto:slinavlee@gmail.com">slinavlee@gmail.com</a><br>Blog: &nbsp; <a href="http://avlee.cnblogs.com">avlee.cnblogs.com</a><br>Site: &nbsp; &nbsp;<a href="http://www.mapboost.org.cn">www.mapboost.org.cn</a><br>