Exporting transparent PNGs (again)
Dave Cragg
dcragg at lacscentre.co.uk
Tue Jul 4 13:10:50 EDT 2006
On 4 Jul 2006, at 16:06, Chris Carroll-Davis wrote:
> Hello again.
>
> Well, I've made some progress! I can now stick an image on a card
> and use that image to make an alpha channel for a second image.
> Hurrah. Trouble is it is S--L--O--W! It takes over 10 seconds to
> process a tiny 50-pixel square image!!! The utility I'm making
> needs to export about 3000 - much larger - graphics!
>
> The problem is that ImageData uses 4 bytes per pixel (even if it is
> a 8-bit greyscale image) but AlphaData only uses 1 byte per pixel,
> so I have to strip the data out in a repeat loop that is huge; even
> for moderately sized graphics! I started with a 300 x 300
> graphic, but of course for AlphaData that is 300x300 bytes = 90,000
> repeats. Yuk! There must be a better way
>
> Is there any lightning fast way of manipulating the binary data
> without resorting to a repeat loop?
>
I'm not sure what calculations you are doing in the loop, but it
sounds too slow. The following routine creates alphaData from a 300 x
300 grayscale image in less than a second on my not so fast machine.
(You'll probably need to substitute the calculation inside the loop
with your own.)
I'm sure others will step up with faster alternatives. :-)
on mouseUp
put the imageData of image 1 into tImageData
put the milliseconds into tStart ## for speed calc
put 0 into tCount
repeat for each char tChar in tImageData
add 1 to tCount
if tCount = 4 then
put numToChar(255 - charToNum(tChar)) after tMaskData
put 0 into tCount
end if
end repeat
put the milliseconds - tStart && length(tMaskData) ##speed score
set the alphaData of image 1 to tMaskData
end mouseUp
Cheers
Dave
More information about the use-livecode
mailing list