Older Newer
Tue, 31 Dec 2019 10:00:30 . . . . SyneRyder [Fix example code formatting]


Changes by last author:

Added:
= srcp =

== Syntax ==

int srcp(int x, int y)

== Arguments ==

:x, y

::Image coordinates

== Return ==

Returns the pixel value at the specified image coordinates

== Description ==

This function lets you read a whole pixel from the source buffer. Unlike src the returned value includes the values of all color channels (including the transparency channel if one is available) of the pixel. Using scrp instead of src takes only approximately half as much time. To decode the individual color values from the returned pixel value you have to use the Rval, Gval, Bval and Aval functions. Currently only works with 8 bit images.

== Example ==

<code>

%ffp

ctl(0): "Brightness", Size=(*,6), Range=(-300,300), Val=100

ctl(2): CHECKBOX, "Use the faster srcp() and psetp()", size=(150,*), Val=0

ctl(10): STATICTEXT, Pos=(*,60), Fontcolor = red, Size=(150,*)

ForEveryTile: {

int c,r,g,b;

int a=255;

const int startclock = clock();

int endclock;

for (y=y_start; y<y_end; y++) {

if (updateProgress(y,y_end)) abort();

for (x=x_start; x<x_end; x++) {

if (ctl(2)) {

// Read a whole pixel

c = srcp (x,y);

// Explode it into the

// color values

r = Rval(c); //c & 0xff;

g = Gval(c); //c >> 8 & 0xff;

b = Bval(c); //c >> 16 & 0xff;

if (Z>3) a = Aval(c); //c >> 24 & 0xff;

// Adjust brightness

r += ctl(0);

g += ctl(0);

b += ctl(0);

if (Z>3) a += ctl(0);

// Makes sure that the

// color values are in the

// right range, otherwise

// we might get a strange

// image result

if (r<0) r=0; else if (r>255) r=255;

if (g<0) g=0; else if (g>255) g=255;

if (b<0) b=0; else if (b>255) b=255;

if (Z>3) {if (a<0) a=0; else if (a>255) a=255;}

// Write back the color values

psetp (x,y, RGBA(r,g,b,a) );

} else {

r = src(x,y,0);

g = src(x,y,1);

b = src(x,y,2);

if (Z>3) a = src(x,y,3);

r += ctl(0);

g += ctl(0);

b += ctl(0);

if (Z>3) a += ctl(0);

pset (x,y,0,r);

pset (x,y,1,g);

pset (x,y,2,b);

if (Z>3) pset (x,y,3,a);

}

}}

endclock = clock() - startclock;

setCtlTextv(10, "Render time needed: %d ms", endclock);

// Display after applying the

// effect to the image. Makes

// the speed difference clearer

if (!doingProxy) Info ("Render time needed: %d ms", endclock);

return true;

}

</code>

== See Also ==

pgetp, psetp, tgetp, tsetp, t2getp, t2setp, Rval, Gval, Bval and Aval

== Comments ==

Everyone can add his comments about his experiences with this function here. Tips for using it are welcome, too.