locked
Limits? RRS feed

  • Question

  •  

    Are there any maximum settings for level, width, height and zoom etc? (in this beta 2 or in a final version?)
    Wednesday, October 17, 2007 7:38 PM

All replies

  • I'm not sure if this answers your question but I'll just throw out the following info:

     

    For a tiled source (xml manifest file), level, width and height are really only limited by your ability to generate the pixels.  For a non-tiled source (jpg, tif, png, wdp) you will be limited by the memory in your system and the systems of the people you are sharing the image with.  For example a non-tiled 10Kx10K image will take up 400MB of memory by the viewer - I wouldn't recommend going beyond that, at least with Beta2.

     

    if you mean restricting the users amount of zoom in and out, then yes those features are there and are tearsly described here: http://research.microsoft.com/ivm/HDView/HowDone/HDXMLspec.htm

     

    there are two xml params which control extent of zoom.

     

    maxZoom is how far the user can zoom into the picture.  The number provided is the max number of screen pixels that a source pixel will fill.  For example specifying 1 means that you will never zoom beyond the source - at max zoom 1 source pixel will equal 1 screen pixel.  Specifying 2 means that you can zoom beyond the source rez by a factor of 2.

     

    maxFOV only comes into play if your projection is non-perspective.  maxFOV is maximum 'field of view'.  This controls how far you can zoom OUT in spherical and cylindrical images.  This is specified in degrees.  You'll notice that the projection changes from a QTVR style rectilinear projection to an equirectangular projection as you zoom out.  If you desire to always stay in the rectilinear domain then set maxFOV to 60 (degrees).

     

    Hope this helps.

     

    -Matt

    Thursday, October 18, 2007 12:21 AM
  •  

    That nearly answers my question, I'm actually dynamically creating tiles in a webserver application, so I don't have any problems generating the tiles. the reason I posed the question is that when moving from 8 levels to 9 levels (200k by 150k) the control seems to stop working correctly and has a blank retangular area right at the top level, what's more I can intercept the requests it's making to my web application and see it's requesting (and getting all the level 0 tiles I'd expect it to retrieve.) Now I haven't ruled out that I'm doing something wrong but I'd like to know if I'm up against a limitation or a bug before I spend more time trying to find the problem.

     

    Also from what you're saying, the control would have no problem with say level=30, width=500k, height=500k for instance??? (if the image was tiled) or is there a hard limit?

     

    Thanks

     

    Matt (Matt)

    Thursday, October 18, 2007 7:52 AM
  •  I just took a look at the largest HD View I can share, the harlem 13 gigapixel image http://www.harlem-13-gigapixels.com/harlem_hdview.html The xml is pasted in below and it does indeed have a level 9.  So I'm pretty sure at least up to level 9 works and probably beyond.  The only limit I'm aware of is that we use a 32bit number to store width and height so that limits them to 2^32 or 4billion each.  In terms of levels, if level 0 is 256 on a side then 2^32 / 2^8 = 2^24 - turns out that 24 levels is the max.

     

    All that said, beyond level 10 you are in untested waters so if you do run into any issues please let me know.

     

    -Matt

     

          <imageset url="./harlem_hdview/l_{l}/c_{c}/tile_{r}.wdp" levels="9" width="279689" height="46901" projection="cylindrical" thetaMin="32" thetaMax="328" phiMin="77.76" phiMax="126.45" rollPitchYaw="0 0 0" maxZoom="1.5" />
    Thursday, October 18, 2007 5:50 PM
  •  

    Thanks Matt, that's very helpful. I'll let you if and how large a level I can get to.
    Friday, October 19, 2007 7:56 AM
  • OK, I've done some more testing and this is what I've found.

     

    To rule any problem with my images I just created a web server which returned the same 256x256 image, regardless of the level, row and column requested (interesting effect when you zoom in).

     

    I took the example 279689x46901 and that works for me at level 9, It gives me 5 Tiles..

     

    00000  (0 represents a tile)

     

    however if you increase the dimensions further (say height to 74901, the problem occurs, I miss 4 Tiles top left tiles so I get

     

    XXXX0

    00000 (X means no tile)

     

    With some more playing around I found the points at other levels where the problem started

     

    Level 13 - Limit 65535x65535 (2^16) (65536x65536 gives the problem)

    Level 12 - Limit 65535x65535 (2^16)

    Level 11 - Limit 65535x65535 (2^16)

    Level 10 - Limit 65535x65535 (2^16)

    Level 9 - Limit 65535x65535 (2^16)

     

    At Level 8 and below I could get to much higher widths x heights

    Friday, October 19, 2007 1:42 PM
  • This is obviously not straighforward as


    65535x65535 =  4,294,836,225

    279689x46901 = 13,117,693,789

     

    Yet the first fails and the second works, there seems to be a problem is the best I can say (and if you're anything to do with development which I assume you are, you might have enough info there to understand what's going on)

     

    Thanks again.

     

    Friday, October 19, 2007 2:08 PM
  • If your image dimensions are not an exact multiple of 256, then you can't provide a 256x256 tile for every request.  If a pyramid level has a width/height that isn't exactly divisible by 256 then the left-most/bottom-most tiles on that level should have different dimensions.  For example a level that is 500 wide should have 2 columns of tiles the first column the tiles are 256 wide, the next they should be 244.  So in your experiment you should set the overall width and height such that every level is a multiple of 256 tall and wide.

     

    I believe that the following xml files should work with your server that only feeds a single 256x256 tile.

     

    <imageset url="your server specific stuff" levels="7" width="32768" height="32768" projection="perspective"/>

    <imageset url="your server specific stuff" levels="8" width="65536" height="65536" projection="perspective"/>

    <imageset url="your server specific stuff" levels="9" width="131072" height="131072" projection="perspective"/>

    <imageset url="your server specific stuff" levels="10" width="262144" height="262144" projection="perspective"/>

    <imageset url="your server specific stuff" levels="11" width="524288" height="524288" projection="perspective"/>

     

     

    Friday, October 19, 2007 5:34 PM
  • Thanks Matt, I'll give that a try although, unfortunately I'll have to wait until Monday to test it.

     

    (Thanks for your quick responses by the way)

     

    Friday, October 19, 2007 7:22 PM
  • Unfortunately I still see problems from level 9 using your values.

     

    It's quite easy to create a dotnet webserver to return images as I've done.

     

    Just a class

     

    public class ImageProcessor : IHttpHandler
    {
     public ImageProcessor()
     {
     }

     public virtual void ProcessRequest(HttpContext context)
     {
      HttpResponse rs = context.Response;
      Bitmap bmp = new Bitmap("Path to a 256x256 image");
      rs.ContentType = "image/jpeg";
      bmp.Save(rs.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
      bmp.Dispose();
     }

     public virtual bool IsReusable
     {
      get {return true;}
     }
    }

     

    And a web config entry.

     

    <httpHandlers>

    <add verb="*" path="*" type="MyWebApp.ImageProcessor, MyWebApp"/>

    </httpHandlers>

     

    Just in case you want to test it yourself. I'm sure you didn't need any help coding one but here's what I used.

    Monday, October 22, 2007 8:24 AM