imagegetpixel
Prev | Orchestra Opcodes and Operators | Next

## imagegetpixel

imagegetpixel — Return the RGB pixel values of a previously opened or created image.

## Description

Plugin opcode in image. This opcode is part of the plugin repository and has to be installed separately. The plugin repository can be found here: https://github.com/csound/plugins

Return the RGB pixel values of a previously opened or created image. An image can be loaded with imageload. An empty image can be created with imagecreate.

## Syntax

    ared, agreen, ablue imagegetpixel iimagenum, ax, ay

    kred, kgreen, kblue imagegetpixel iimagenum, kx, ky

## Initialization

iimagenum -- the reference of the image. It should be a value returned by imageload or imagecreate.

## Performance

ax (kx) -- horizontal pixel position (must be a float from 0 to 1).

ay (ky) -- vertical pixel position (must be a float from 0 to 1).

ared (kred) -- red value of the pixel (mapped to a float from 0 to 1).

agreen (kgreen) -- green value of the pixel (mapped to a float from 0 to 1).

ablue (kblue) -- blue value of the pixel (mapped to a float from 0 to 1).

## Examples

Here is an example of the imagegetpixel opcode. It uses the files imagegetpixel.csd, imageOpcode01.png and imageOpcode02.png.

Example 464. Example of the imagegetpixel opcode.

    <CsoundSynthesizer>
    <CsOptions>
    ; Select audio/midi flags here according to platform
    -odac  --limiter=.95 ;;;realtime audio out and limiter
    ;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
    ; For Non-realtime ouput leave only the line below:
    ; -o imagegetpixel.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    sr = 44100
    ksmps = 32
    0dbfs  = 1
    nchnls = 2

    ; by Cesare Marilungo 2008
    ; additions by Menno Knevel 2021

    giimage01 imageload "imageOpcode01.png"                     ; load 2 images - should be 512x512 pixels
    giimagew01, giimageh01  imagesize   giimage01
    giimage02 imageload "imageOpcode02.png"
    giimagew02, giimageh02  imagesize   giimage02

    gisine ftgen 1, 0, 8192, 10, 1                              ; sine wave
    gifrqs ftgen 2, 0, 512, -5, 1, 512, 10                      ; will hold the frequencies
    giamps ftgen 3, 0, 512, 10, 1                               ; ready for amplitude data

    instr 1

    kindex = 0
    icnt = giimageh01                                           ; height of image imageOpcode01.png
    kx_ linseg 0, p3, 1                                         ; scans x-axis
    kenv linseg 0, p3*.1, .1, p3*.8, .1, p3*.1, 0               ; amplitude envelope

    ; Read a column of pixels and store the red values inside the table 'giamps'
    loop:
        ky_ = 1-(kindex/giimageh01)                             ; reverses direction of reading
        kred, kgreen, kblue imagegetpixel giimage01, kx_, ky_   ; get the pixel color values at kx_, ky_
        tablew kred, kindex, giamps                             ; write the red values inside the table 'giamps'
        kindex = kindex+1
    if (kindex < icnt) kgoto loop
    ; setting amplitudes for each partial according to the image
    asig adsynt2 kenv, 110, gisine, gifrqs, giamps, icnt, 2     ; oscillator bank (additive synthesis)
    outs asig, asig
    endin

    instr 2   ; Free memory used by imageOpcode01.png
    imagefree giimage01
    endin

    instr 3

    kindex = 0
    icnt = giimageh02                                           ; height of image imageOpcode02.png
    kx_ linseg 0, p3, 1                                         ; scans x-axis
    kenv linseg 0, p3*.2, .02, p3*.4, .02, p3*.2, 0             ; amplitude envelope
    ; Read a column of pixels and store the blue values inside the table 'giamps'
    loop:
        ky_ = 1-(kindex/giimageh02)                             ; reverses direction of reading
        kred, kgreen, kblue imagegetpixel giimage02, kx_, ky_   ; get the pixel color values at kx_, ky_
        tablew kblue, kindex, giamps                            ; write the blue values inside the table 'giamps'
        kindex = kindex+1
    if (kindex < icnt) kgoto loop

    asig adsynt2 kenv, 100, gisine, gifrqs, giamps, icnt, 2     ; oscillator bank (additive synthesis)
    outs asig, asig
    endin

    instr 4   ; Free memory used by imageOpcode02.png
    imagefree giimage02
    endin

    </CsInstruments>
    <CsScore>
    i1  1  3    ; play first image
    i2  4 .1    ; then unload first image
    i3  5  5    ; play second image
    i4 11 .1    ; and unload that one
    e
    </CsScore>
    </CsoundSynthesizer>

Here is what the images imageOpcode01.png and imageOpcode02.pngfor the imagegetpixel example look like:

Here is a musical example of the imagegetpixel opcode. It uses the files imagegetpixel-musical.csd and imageOpcode03.png.

Example 465. Example of the imagegetpixel opcode.

    <CsoundSynthesizer>
    <CsOptions>
    ; Select audio/midi flags here according to platform
    -odac  ;;;realtime audio out
    ;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
    ; For Non-realtime ouput leave only the line below:
    ; -o imagegetpixel-musical.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    sr = 44100
    ksmps = 32
    nchnls = 2
    0dbfs  = 1

    #define TABLEN# 64#
    giRtab ftgen 1, 0, $TABLEN, 10, 1
    giGtab ftgen 2, 0, $TABLEN, 10, 1
    giBtab ftgen 3, 0, $TABLEN, 10, 1

    gisin ftgen 11, 0, 1024, 10, 1

    giimg imageload "imageOpcode03.png"
    giimgH, giimgW imagesize giimg

    instr 1
    kndx = 0

    kyR oscili .5, .15, 11
    kyR = (kyR + .5) * .999

    kyG oscili .5, .25, 11
    kyG = (kyG + .5) * .999

    kyB oscili .5, .4, 11
    kyB = (kyB + .5) * .999

    ilen = 64
    loop:
    kR, k0, k1 imagegetpixel giimg, kndx / (ilen+1), kyR
    k2, kG, k3 imagegetpixel giimg, kndx / (ilen+1), kyG
    k4, k5, kB imagegetpixel giimg, kndx / (ilen+1), kyB

    kRval = kR * 2 - 1
    tabw kRval, kndx, giRtab

    kGval = kG * 2 - 1
    tabw kGval, kndx, giGtab

    kBval = kB * 2 - 1
    tabw kBval, kndx, giBtab

    if kndx < ilen then
    kndx = kndx + 1
    kgoto loop
    endif

    iampgain = .3
    kamp madsr 2, 0, 1, 3
    kamp = kamp * iampgain
    ifrq = cpspch(p4)

    aR oscil3 kamp * kyG, ifrq, giRtab
    aG oscil3 kamp * kyB * .8, ifrq * 2.01, giGtab
    aB oscil3 kamp * kyR * .8, ifrq * 1.99, giBtab

    aR butlp aR, 5000
    aG butlp aG, 10000
    aB butlp aB, 10000

    asigL = (aR + aG)*.9     ; green Left channel
    asigR = (aR + aB)*.9     ; blue Right channel & red in the middle

    adelL comb asigL, 1, .25
    asigL = asigL + adelL * .5
    asigL dcblock asigL

    adelR comb asigR, 1, .3
    asigR = asigR + adelR * .5
    asigR dcblock asigR

    outs asigL, asigR

    endin

    </CsInstruments>
    <CsScore>
    i1 0 25 8.00
    i. 5 20 8.02
    i. 10 10 8.07
    i. 15 10 8.09
    i. 20 5 8.11

    </CsScore>
    </CsoundSynthesizer>

This is what the image imageOpcode03.png for the imagegetpixel-musical example looks like:

## See also

Image processing opcodes

## Credits

Author: Cesare Marilungo

New in version 5.08

Prev | Up | Next
imagefree | Home | imageload