00001
00002
00003
00004
00005
00006
00007
00008 #include "ckimage.h"
00009 #include <string.h>
00010
00011
00012
00013
00014 void CkImage::clear(void) {
00015 for (int y=0;y<ht;y++)
00016 memset(&data[y*row],0,wid*colors);
00017 }
00018
00019
00020
00021
00022 void CkImage::put(int sx,int sy,const CkImage &src) {
00023 for (int y=0;y<src.ht;y++)
00024 for (int x=0;x<src.wid;x++)
00025 copyPixel(src.getPixel(x,y),getPixel(x+sx,y+sy));
00026 }
00027
00028
00029
00030
00031 void CkImage::add(int sx,int sy,const CkImage &src) {
00032 for (int y=0;y<src.ht;y++)
00033 for (int x=0;x<src.wid;x++)
00034 addPixel(src.getPixel(x,y),getPixel(x+sx,y+sy));
00035 }
00036
00037
00038
00039
00040
00041 void CkImage::addClip(int sx,int sy,const CkImage &src,const channel_t *clip) {
00042 for (int y=0;y<src.ht;y++)
00043 for (int x=0;x<src.wid;x++)
00044 addPixelClip(src.getPixel(x,y),getPixel(x+sx,y+sy),clip);
00045 }
00046
00047
00048
00049
00050
00051
00052
00053 CkImage::channel_t *CkImage::newClip(void){
00054 const int tableLen=2*channel_max+1;
00055 channel_t *ret=new channel_t[tableLen];
00056 int i;
00057 for (i=0;i<channel_max;i++) ret[i]=(channel_t)i;
00058 for (i=channel_max;i<tableLen;i++) ret[i]=(channel_t)channel_max;
00059 return ret;
00060 }
00061
00062
00063 void CkAllocImage::pup(PUP::er &p) {
00064 CkImage::pup(p);
00065 if (p.isUnpacking()) allocate();
00066 int len=getRect().area()*getColors();
00067 p(allocData,len);
00068 }