ColdFusion Image Coordinates Are Zero-Based

Posted February 25, 2008 at 8:39 AM

Tags: ColdFusion

This might not be news to anyone else, but I never actually thought about the coordinates used in ColdFusion image manipulation functions. I am so used to everything in ColdFusion being one-based that I just assumed that ColdFusion image manipulation would work the same way. Well, as I was working on updating the ImageUtils.cfc, I realized that I was way off base (thanks to OutOfBounds errors getting thrown left and right). As it turns out, ColdFusion image objects are zero-based when it comes to pixel coordinates. To test this, I ran some of ColdFusion 8's X/Y based methods:

 Launch code in new window » Download code as text file »

  • <!--- Create 10x10 image. --->
  • <cfset objImage = ImageNew(
  • "",
  • 10,
  • 10,
  • "argb",
  • "##262626"
  • ) />
  •  
  • <!--- Copy based on zero-based coordinates. --->
  • <cfset objImage2 = ImageCopy(
  • objImage,
  • 0,
  • 0,
  • 10,
  • 10
  • ) />
  •  
  • <!--- Crop image based on zero-based coordinates. --->
  • <cfset ImageCrop(
  • objImage2,
  • 0,
  • 0,
  • 5,
  • 5
  • ) />
  •  
  • <!--- Draw rectangle using zero-based coordinates. --->
  • <cfset ImageDrawRect(
  • objImage2,
  • 0,
  • 0,
  • 5,
  • 1,
  • "yes"
  • ) />
  •  
  • <!--- Draw line using zero-based coordinates. --->
  • <cfset ImageDrawLine(
  • objImage2,
  • 0,
  • 0,
  • 50,
  • 50
  • ) />

As you can see, things like ImageCopy(), ImageCrop(), ImageDrawRect(), and ImageDrawLine() all work with zero-base coordinates. Ok, in all fairness, I believe that ImageDrawRect() and ImageDrawLine() will actually work with off-canvas values; however, ImageCrop() will throw an OutOfBounds error if you try to go off canvas.

So, there you have it - ColdFusion image manipulation is zero-based, not one-based. This isn't hugely important information, but there are some things that I will have to go back and fix in the ImageUtils.cfc where some one-to-zero base calculations take place.

Download Code Snippet ZIP File

Comments (5)  |  Post Comment  |  Ask Ben  |  Permalink  |  Other Searches  |  Print Page




Adobe ColdFusion 8.0.1 Update - Helping Programmers To Be Signifanctly Less Girlie - Download ColdFusion 8 Update 8.0.1 Now.

Reader Comments

This is as expected. Every photo editing software out there uses 0,0 as the top left corner. Good find nonetheless.

Posted by Andy Matthews on Feb 25, 2008 at 10:45 AM


@Andy,

That's actually how I came to realize this. I was using the underlying Java AWT library that helps to power the ColdFusion image object and I saw that their pixel coordinates all start at 0,0. Then, I was doing a translation from 1,1 (CF) to 0,0 (Java) and was getting the out of bounds errors.

I would say, however, to be careful about what is "Expected". Could you not say the same thing about arrays? Every other language in the universe uses zero based arrays, and yet, ColdFusion does not. So, the expectation set by the programming world at large does not necessarily translate to what is done in CF. Not that I am bad mouthing CF in any way, I love it. Just saying, I don't think either way would have been obvious.

Posted by Ben Nadel on Feb 25, 2008 at 10:50 AM


'every other language'?

http://en.wikipedia.org/wiki/Comparison_of_programming_languages_%28array%29#Array_system_cross-reference_list

I wonder if JJ Allaire had a background in something like Fortran or Smalltalk which influenced his decision (assuming it was his) to use 1-based arrays.

Posted by duncan on Feb 26, 2008 at 4:37 AM


that URL doesn't seem to work in your blog, here it is in short format:
http://tinyurl.com/2hz4s2

Posted by duncan on Feb 26, 2008 at 4:39 AM


Ok, maybe not every other language :) But a good deal of them. My only point is that since so much stuff starts at "1" in ColdFusion, I didn't think right away that the image functionality would start at zero.

Posted by Ben Nadel on Feb 26, 2008 at 7:26 AM


Post Comment  |  Ask Ben


Home   |   Web Log   |   ColdFusion   |   Projects   |   Resume   |   Job Form   |   Search   |   Contact
Epicenter Consulting - Custom Software Solutions for Business Evolution HostMySite.com - The Leader In ColdFusion Hosting