#include #include int bufsize(int width,int height){ return 256+((5+3*3+2+1)*width + 1)*height; } void putnum(unsigned char* buf,int* p, unsigned int r) { if(r >= 1000) { unsigned char sbuf[32]; int len; int i; sprintf(sbuf,"%d",r); len=strlen(sbuf); for(i=0;i 3){ buf[p++] = '!'; putnum(buf,&p,num+1); i=k-1; } } buf[p++] = (1 << (j%6))+0x3f; prev = cur; } if(j%6 ==5){ buf[p++] = '-'; // LR }else{ buf[p++] = '$'; // CR } } buf[p++] = 033; // END buf[p++] = '\\'; // END return p; } int img2palettized_sixel(unsigned char* buf, unsigned char* img, unsigned char* colors,int width,int height){ int i,j,k; int p=0; int c; int prev = -1; buf[p++] = 033; // ESC buf[p++] = 'P'; buf[p++] = '8'; buf[p++] = ';'; buf[p++] = '1'; buf[p++] = ';'; buf[p++] = '0'; buf[p++] = 'q'; buf[p++] = '"'; buf[p++] = '1'; buf[p++] = ';'; buf[p++] = '1'; buf[p++] = ';'; putnum(buf,&p,width); buf[p++] = ';'; putnum(buf,&p,height); for(i=0;i<256;i++){ buf[p++] = '#'; putnum(buf,&p,i); buf[p++] = ';'; buf[p++] = '2'; buf[p++] = ';'; putnum(buf,&p,colors[i*3]*101/256); buf[p++] = ';'; putnum(buf,&p,colors[i*3+1]*101/256); buf[p++] = ';'; putnum(buf,&p,colors[i*3+2]*101/256); } for(j=0;j 3){ buf[p++] = '!'; putnum(buf,&p,num+1); i=k-1; } } buf[p++] = (1 << (j%6))+0x3f; prev = cur; } if(j%6 ==5){ buf[p++] = '-'; // LR }else{ buf[p++] = '$'; // CR } } buf[p++] = 033; // END buf[p++] = '\\'; // END return p; }