ColdFusion Image Coordinates Are Zero-Based

Posted February 25, 2008 at 8:39 AM by Ben Nadel

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:

  • <!--- 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.




Reader Comments

Feb 25, 2008 at 10:45 AM // reply »
92 Comments

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


Feb 25, 2008 at 10:50 AM // reply »
11,238 Comments

@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.


Feb 26, 2008 at 4:37 AM // reply »
18 Comments

'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.


Feb 26, 2008 at 4:39 AM // reply »
18 Comments

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


Feb 26, 2008 at 7:26 AM // reply »
11,238 Comments

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.


Jul 15, 2010 at 3:54 PM // reply »
20 Comments

Your blog is always awesome. I am working on tiling images for zoomify and my math wasn't working out. Why? I started with 1,1 for my grid. Thanks for the help :)


Jul 18, 2010 at 11:46 AM // reply »
11,238 Comments

@Jeff,

Always happy to help!


Post A Comment

Comment Etiquette: Please do not post spam. Please keep the comments on-topic. Please do not post unrelated questions or large chunks of code. And, above all, please be nice to each other - we're trying to have a good conversation here.

Please review the following issues:

Author Name:


Author Email:

Author Website:

Comment:

Supported HTML tags for formatting: <strong>bold</strong>   <em>italic</em>   <code>code</code>







  • Help Wanted - Find Your Next ColdFusion Job
Ben Nadel's Company - Epicenter Consulting Recent Blog Comments
May 17, 2013 at 7:42 PM
HashKeyCopier - An AngularJS Utility Class For Merging Cached And Live Data
Ben - thanks so much for posting these Angular articles and findings, they've been a huge help towards learning one of the more 'complex' JavaScript frameworks out there (IMO). I have been using Angu ... read »
May 16, 2013 at 5:01 PM
UPDATE: Parsing CSV Data Files In ColdFusion With csvToArray()
Your code was the closest thing I've found to obtaining some direction for converting ISO fields to values that CF can translate properly. Thank you for posting! ... read »
May 15, 2013 at 10:37 PM
Very Simple Pusher And ColdFusion Powered Chat
hi id making plz easy ... read »
May 15, 2013 at 6:07 PM
Making SOAP Web Service Requests With ColdFusion And CFHTTP
Ben, you once again saved my bacon at work. Thank you, thank you, thank you! ... read »
May 15, 2013 at 4:15 PM
What If All User Interface (UI) Data Came In Reports?
@Josh, Thanks! @Ben, I definitely recommend the David West book "Object Thinking" I've been quoting from. It goes deeply into the philosophy and history of OO programming. His breadth ... read »
May 15, 2013 at 11:36 AM
Ask Ben: Print Part Of A Web Page With jQuery
I found this helpfull when you need to keep (refresh) the original parent page after closing the iframe child print dialog (Hoping you're not using a form at this time so it won't submit again): On ... read »
May 14, 2013 at 7:13 PM
What If All User Interface (UI) Data Came In Reports?
@Jonah, If there's any books you'd recommend on the subject of domain modelling, I'd love to hear it. I just downloaded the free PDF of "Domain Driven Design Quickly". Figured I'd give it ... read »
May 14, 2013 at 6:57 PM
The UX Of Prototyping: Low-Fidelity Is The New High-Fidelity
@Phillip, I'm not sure I follow what you mean? Are you saying that you looked at the list of widgets provided by the jQuery UI and let that be your style guide? ... read »
InVision App - Prototyping Made Beautiful With Prototyping Tools