[etoys-dev] How can I access the individual pixels in an image
bert at freudenbergs.de
Fri May 25 14:32:14 EDT 2012
Well, for one, all these values are fractions in the range 0 to 1.
If you use 0 in your example, the image will become fully transparent. If you use 1, it will be fully opaque.
Since 16 bit forms store only 1 bit of alpha (and 5 bits each for red, green, and blue), you cannot do more than toggle that bit.
If you want real translucency, create newForm with 32 bits of depth instead of 16. Then each component gets full 8 bits, and e.g. using an alpha of 0.5 will make the whole image half-transparent.
- Bert -
On 25.05.2012, at 20:23, Steve Thomas wrote:
> <Screen Shot 2012-05-25 at 2.22.06 PM.png>
> I tried setting alpha to 50, but it didn't work, see script below.
> | oldForm newForm old new avg |
> oldForm := ErnieRubberDuckie getGraphic.
> newForm := Form extent: oldForm extent depth: 16.
> to: oldForm height - 1
> do: [:y | 0
> to: oldForm width - 1
> do: [:x |
> old := oldForm colorAt: x @ y.
> avg := old red + old green + old blue / 3.
> new := Color
> r: old red * 0 + avg
> g: old green * 0 + avg
> b: old blue * 0 + avg
> alpha: 50.
> newForm colorAt: x @ y put: new]].
> self setGraphic: newForm
> On Fri, May 25, 2012 at 7:59 AM, Bert Freudenberg <bert at freudenbergs.de> wrote:
> On 25.05.2012, at 12:35, Steve Thomas wrote:
>> How can I loop through each pixel in an image and get their red,green,blue values?
>> I also would like to be able to create a new image using those values (modified, for example set red=red*0.5)
>> I know Karl did a great project Color Reading And Writing which I could use, but would like to introduce some of the kids to squeak.
> - Bert -
-------------- n?chster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
More information about the etoys-dev