displaying numerous large image files quickly

J. Landman Gay jacque at hyperactivesw.com
Sun Feb 21 22:22:59 EST 2010


Mark Swindell wrote:
> Yes, using smaller images definitely reduces the display time... a
> batch of smaller gif/jpg line drawings only takes 1.5 seconds to
> display, but the idea is that the user can choose any image folder
> off their HD to create a custom, high-interest game (family members,
> friends, animals being studied (marsupials at present, mate). 

I had a similar issue in a client project, only we wanted to save disk 
space instead of load time. We ended up copying the user's image to a 
folder in Application Data (you could use the temp folder instead) and 
resizing it for display. The resizing and disk write is very fast and it 
reduces multi-meg camera images to a few hundred K. If you aren't going 
to re-use the images then this probably won't work -- you may as well 
use the time just to show the image -- but if you need to load them 
again later, resizing helps.

Here's what I'm using:

on reduceImgSize pFileName,pDestPath,pWidth,pHeight
   -- reduce disk footprint; scale & compress.
   -- first param is orig img file; second is destination file path, 
followed by target dimensions
   if pWidth = "" then put 640 into pWidth
   if pHeight = "" then put 480 into pHeight
   set the cursor to watch
   create img "temp"
   set the width of img "temp" to pWidth
   set the height of img "temp" to pHeight
   set the lockloc of img "temp" to true
   set the filename of img "temp" to pFileName
   if the formattedWidth of img "temp" > pWidth then
     get scaleToFit(the name of img "temp",the rect of img "temp")
     set the imageData of img "temp" to the imageData of img "temp"
     set the JPEGQuality to 80
     export img "temp" to file pDestPath as jpeg
   else -- img is small enough
     put URL ("binfile:"&pFileName) into URL ("binfile:"&pDestPath)
   end if
   delete img "temp"
end reduceImgSize

function scaleToFit pImg,pRect
   -- scale an image to fit a rectangle
   -- params: the image long name, the target rect
   put the formattedHeight of pImg into tFHt
   put the formattedWidth of pImg into tFWd
   put item 3 of pRect - item 1 of pRect into tTargetWd
   put item 4 of pRect - item 2 of pRect into tTargetHt
   put false into tWasScaled -- init
   if "image" is in pImg then set the rect of pImg to pRect -- to init
   put the loc of pImg into tLoc
   set the width of pImg to tFWd
   set the height of pImg to tFHt
   if tTargetHt < tFHt or tTargetWd < tFWd then
     put min(tTargetHt/tFHt, tTargetWd/tFWd) into theRatio
     set the height of pImg to tFHt*theRatio
     set the width of pImg to tFWd*theRatio
     put true into tWasScaled
   end if
   set the loc of pImg to tLoc
   return tWasScaled
end scaleToFit

-- 
Jacqueline Landman Gay         |     jacque at hyperactivesw.com
HyperActive Software           |     http://www.hyperactivesw.com



More information about the use-livecode mailing list