What is up with FormattedHeight?

Howard Bornstein bornstein at designeq.com
Fri Feb 10 15:38:19 EST 2012


Wow, thank you Ken and Scott. This was the direction I was planning on
pursuing for a solution, but the difference here is that it would have
taken me a month, whereas I'm sure Scott knocked this out in his head while
brushing his teeth before his morning cup of coffee. Awesome!

I appreciate everyone's help with this problem.

I also wanted to mention that Bernd Niggemann has been helping me privately
and has made some speed-up modifications to Scott's script, which I hope he
will post here so others can take advantage of it.

-- 
Regards,

Howard Bornstein
-----------------------
www.designeq.com

On Thu, Feb 9, 2012 at 4:37 AM, Scott Rossi <scott at tactilemedia.com> wrote:

> Hi Ken:
>
> The following function does what you propose using a transitional image and
> gets pretty close.  It requires the long id of the target field, and only
> works on transparent fields.  You'd have to add additional code to convert
> the non-text portion of the field to alphaData, or temporarily convert the
> field to transparent and restore after capturing the text rect.
>
>
> function tmTextRect pField
>   lock screen
>   ## CREATE IMAGE WITH ALPHADATA
>   reset the templateImage
>   set lineSize of the templateImage to 0
>   create image
>   put long id of it into tempImage
>   do "export snapshot from" && pField && "to" && tempImage && "as PNG"
>   put alphadata of tempImage into theAlphaData
>   ## DEFINE GRID
>   put width of tempImage into theColumnCount
>   delete tempImage
>   reset the templateImage
>   unlock screen
>   ## LOOP THROUGH ALPHA DATA LOOKING FOR
>   ## PIXELS THAT MEET VISIBILITY THRESHOLD (> 5)
>   put 1 into theRowNum
>   put 0 into theColumnNum
>   put 0,0,0,0 into theRect
>   repeat for each char theByte in theAlphaData
>      add 1 to theColumnNum
>      put charToNum(theByte) into theValue
>      if theValue > 5 then
>         if item 1 of theRect is 0 then
>            put theColumnNum into item 1 of theRect
>            put theRowNum into item 2 of theRect
>            put theColumnNum into item 3 of theRect
>            put theRowNum into item 4 of theRect
>         end if
>         put min(theColumnNum, item 1 of theRect) into item 1 of theRect
>         put min(theRowNum, item 2 of theRect) into item 2 of theRect
>         put max(theColumnNum, item 3 of theRect) into item 3 of theRect
>         put max(theRowNum, item 4 of theRect) into item 4 of theRect
>      end if
>      if theColumnNum = theColumnCount then
>         add 1 to theRowNum
>         put 0 into theColumnNum
>      end if
>   end repeat
>   add left of pField to item 1 of theRect
>   add left of pField to item 3 of theRect
>   add top of pField to item 2 of theRect
>   add top of pField to item 4 of theRect
>   return theRect
> end tmTextRect
>
>
> Regards,
>
> Scott Rossi
> Creative Director
> Tactile Media, UX Design
>
>
>
>
>
> Recently, Ken Corey wrote:
>
> > On 06/02/2012 03:30, Howard Bornstein wrote:
> >> I need to find the smallest rectangle that will enclose a line of text
> of
> >> arbitrary text size in a field. I thought I could use formattedheight
> and
> >> formattedwidth to do this but it doesn't seem to be working.
> >
> > I'm very perplexed too.
> >
> > Instead of worrying about what is/is not added to the text image, fonts,
> > screen smoothing, margins, whatever (itis bound to have a
> > platform-specific element to it), I figured "Why not just ask the bits?"
>
>



More information about the use-livecode mailing list