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