bitmap-0.0.0: cbits/bm.c
/*
the C part of the Data.Bitmap library
(c) 2009 Balazs Komuves
*/
#include <string.h>
#include "bm.h"
// -----------------------------------------------------------------------------
void c_memset(word8 *q, int count, word8 x)
{ memset(q,x,count);
}
// (from, to, count)
void c_memcpy(word8 *p, word8 *q, int count)
{ memcpy(q,p,count);
}
// -----------------------------------------------------------------------------
#define K_WORD8 1
#define K_WORD16 2
#define K_WORD32 3
#define K_FLOAT 4
#define PLUSPTR(P,TYP,K) P=(TYP*)(((word8*)P)+K);
// -----------------------------------------------------------------------------
#define C_EXTRACT_CHANNEL(TYP) \
void c_extract_channel_ ## TYP \
( int width, int height \
, TYP *p1, int nchn1, int pad1, int ofs1 \
, TYP *p2, int nchn2, int pad2, int ofs2 \
) \
{ int x,y; \
TYP *q1,*q2; \
q1 = p1 + ofs1; \
q2 = p2 + ofs2; \
for(y=0;y<height;y++) \
{ for(x=0;x<width;x++) \
{ *q2 = *q1; \
q1 += nchn1; \
q2 += nchn2; \
} \
PLUSPTR(q1,TYP,pad1); \
PLUSPTR(q2,TYP,pad2); \
} \
}
C_EXTRACT_CHANNEL(word8 )
C_EXTRACT_CHANNEL(word16)
C_EXTRACT_CHANNEL(word32)
C_EXTRACT_CHANNEL(float )
void c_extract_channel
( int k_type
, int width, int height
, void *p1, int nchn1, int pad1, int ofs1
, void *p2, int nchn2, int pad2, int ofs2
)
{ switch(k_type)
{ case K_WORD8:
c_extract_channel_word8 ( width,height, p1,nchn1,pad1,ofs1, p2,nchn2,pad2,ofs2 );
break;
case K_WORD16:
c_extract_channel_word16( width,height, p1,nchn1,pad1,ofs1, p2,nchn2,pad2,ofs2 );
break;
case K_WORD32:
c_extract_channel_word32( width,height, p1,nchn1,pad1,ofs1, p2,nchn2,pad2,ofs2 );
break;
case K_FLOAT:
c_extract_channel_float ( width,height, p1,nchn1,pad1,ofs1, p2,nchn2,pad2,ofs2 );
break;
}
}