AW: differences between text/imagedata of image in LC6/8

Tiemo Hollmann TB toolbook at
Fri Mar 24 07:41:27 EDT 2017

Thank you for the comprehensive explanation!

-----Ursprüngliche Nachricht-----
Von: use-livecode [mailto:use-livecode-bounces at] Im Auftrag
von Mark Waddingham via use-livecode
Gesendet: Freitag, 24. März 2017 11:58
An: How to use LiveCode <use-livecode at>
Cc: Mark Waddingham <mark at>
Betreff: Re: differences between text/imagedata of image in LC6/8

Hi Tiemo,

> in an old program I obviously tried to be very technically over 
> correct when copying an image and did:
> 1.       set the imagedata of img 2 to the imagedata of img 1
> This worked up to LC 6.7. In LC8/9 I get a corrupted image (black and
> stripes) in the target image.

The imageData of an image is the extracted color values for the pixels in
the image. Specifically, it is a sequence of bytes with each pixel
represented as xRGB. These are the bytes which are applied to the screen
when the image is rendered and does not include any alpha data (which is
specified using the alphaData property). To set the imageData you need to
set the width and height of the field first.

> What works in LC8/9 is
> 2.       set the text of img 2 to the text of img 1
> and
> 3.       put img 1 into img 2

Both of these do the same thing - (3) is short hand for (1).

The 'text' of an image is the original image data from a format such as PNG,
GIF etc.
i.e. the content of a PNG file or GIF file.

> What is the correct syntax today? Is solution 2 and 3 the same and 
> just an alias (what it seems to me) or are there differences in 
> details I do not see?

In general, (2) or (3) is better than (1) as (1) is considered an 'image
operation and as such will cause a recompression of the data in some
fashion. Also
(2) and (3) will automatically set the size, and alpha channel of the image

> And is there any explanation why the upward compatibility of solution 
> 1 is broken?

If there is a difference here then it is a bug - although please do check
that the width/height of the image is the same, and also transfer across
alphaData too.

I'd recommend using (2) or (3) - or, indeed, using referenced files instead.
The engine will automatically cache referenced images and share the
underlying decompressed data.

    set the filename of image 1 to "foo"
    set the filename of image 2 to "foo"

Will first resolve "foo" as an absolute path, load that image file into a
cache if not already present and attach the decompressed image data to the
image object. Then, when the second image's filename is set, it will find
the image is already in the cache and just use the decompressed image data
attached to that file in the cache.
i.e. The two images share the same pixel data in memory.

Warmest Regards,


Mark Waddingham ~ mark at ~
LiveCode: Everyone can create apps

use-livecode mailing list
use-livecode at
Please visit this url to subscribe, unsubscribe and manage your subscription

More information about the use-livecode mailing list