SetPixel.C
This demonstrates how pixels are addressed in the image buffer memory
array.
/*
Plugin Tutorial
example 4 - SetPixel.C
demonstrate individual pixel and channel addressing
*/
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include <memory.h>
#include "cpi.h"
#define XYPOS "XY position"
#define CLEAR_R "Clear red"
#define CLEAR_G "Clear green"
#define CLEAR_B "Clear blue"
#define CLEAR_A "Clear alpha"
#define SET 1
#define UNSET 0
#define FIRST_ELEM 0
#define SECND_ELEM 1
template <class T>
void clearPixel(T *image, unsigned int offset, unsigned int channels)
{
int i;
image += offset;
for (i = 0; i < channels; i++)
{
*image = (T)0;
image++;
}
}
CPIDSOEXPORT void upiCreateParameters( void )
{
int idef[] = {100, 100};
cpiAddTab( "Parameters" );
cpiAddIntVector( XYPOS, 2, idef, 1, 100, 0);
cpiAddToggle( CLEAR_R, SET, 0);
cpiAddToggle( CLEAR_G, SET, 0);
cpiAddToggle( CLEAR_B, SET, 0);
cpiAddToggle( CLEAR_A, SET, 0);
return;
}
CPIDSOEXPORT int upiProcessImage( CPI_Image *result )
{
int xpos, ypos, pelsize, channels, offset;
cpiGetIntVector(XYPOS, result->info.time, FIRST_ELEM, &xpos);
cpiGetIntVector(XYPOS, result->info.time, SECND_ELEM, &ypos);
channels = result->info.channels;
switch( result->info.pelType)
{
case P_INT8:
pelsize = channels * 1;
offset = ypos * result->info.sizeY * pelsize + xpos * pelsize;
clearPixel((unsigned char *)result->data, offset, channels);
break;
case P_INT16:
pelsize = channels * 2;
offset = ypos * result->info.sizeY * pelsize + xpos * pelsize;
clearPixel((unsigned short *)result->data, offset, channels);
break;
case P_FLOAT32:
pelsize = channels * 4;
offset = ypos * result->info.sizeY * pelsize + xpos * pelsize;
clearPixel((float *)result->data, offset, channels);
break;
default:
cpiError("Unknown pixel type");
return 1;
}
return 0;
}
[ Table of Contents ]
[ Index]
Copyright © 1998 Silicon Grail Inc.
710 Seward Street, Hollywood, CA 90038