📄 ccputstring.c
字号:
/*--------------------------- MegaWave2 Module -----------------------------*//* mwcommandname = {ccputstring};author = {"Lionel Moisan"};version = {"1.0"};function = {"Put in PLACE a string (read from standart input) on a Ccimage"};usage = { 'r':r->r[0,100] "select dilatation radius for background", 'c':[c=999]->c "fg color (RGB, 1 decimal digit per channel, default 999)", 'C':[C=0]->C "bg color (RGB, 1 decimal digit per channel, default 0)", in->in "input Ccimage", x->x "string x position (topleft)", y->y "string y position (topleft)", out<-ccputstring "output Ccimage (modified input)", notused->str "string (internal call only)"};*/#include <stdio.h>#include <strings.h>#include "mw.h"extern Curve disc();#define FONTWIDTH 7#define FONTHEIGHT 14char *font[98]={"0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000036000000018050000","00000002004120:10<8<0808804000000002004120:792920810415000000004","004240:95312101040>100000004004007>94>12002020410000000800400145","020<002020>10000000800400143841900202157<01?8008004007>147250020","204100000010000002894<:200202001000000100040028954:6001040010600","04200040028793190010400002000>2000000001000000088000020004400000","0000000000050000040000400000000000000000000000000000000000000000","00000000000000003021>3<09?8>7>78?0000000003<48621421901142850800","0080204284:2142290214485084001001042842010229?20044908>1821?8804","842021<490:>08311841840004088420202480;10848>8000800020884204028","80:108840800041?84088420842?=0:108850841820008004821042090:10885","10>08100100830?;?3<08?1>0878>04080802008000000000000000000010000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000003863>3<?9?;?3<84?8742810:13<449114245020","428420244819:1429=0914245020428420248819;142:5091404502040842025","0816;142:509>4045>3<40?<20260816:942:5?9140450204>8420250810:542",":50914045020428420248810:3429=0914245020428422244810:34241091424","5020468422242810:1423=0;>3<?9?:03:84?9<42?=0:13<0000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000001>81>0<00?8?3>3=?=0:1428513?108021200850:","142210:14285101104022100850:142210:14249102104020000850:140210:1","4248:04102020000850:130210924230:04102020000?90;>0<210925:304081","0202000081<:402210925:48410101020000812:2422108<6648410101020000","811:1422108<668442010082000080?213<20?0<428443?10082000000100000","0000000000010042000000080000000000000001>05>007>0000000000000000","0000000000001800000000000000000000000000100200004006008020240300","00001002000040090080202401000000080200004008008000040100000000?2",">3<74?083:;86064411:2>3<010;1428=0;>44<4202481153142003:14085088","448420250115214200<:14085?884484202701152142010:1408500838842024","81152142011;1428=088208420244115214200>:>3<74?085<84?:2427=1213<","00000000000042000220000000000000000000003<0001<00000000000000000","0000000000000000000000000000000000000000621810000000000200000000","0000820429000000000200000000000082042500000000020000000000008204","0200;8>:>3<?90:244850;?082040000<51;142210:24485082082040000850:","120210:25449084102020000850:018210945431088082040000850:00421094","5449188082040000<51:042251885484>90082040000;8>:03<18>8828840;?0","8204000080080000000000010800820400008008000000000000?00062180000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","000000000000000000000000000000000000000000000000000000003<90?0>0","00001>0000400000108842910910000021?0004001800908200168?000003=00","00008248460818019910000033000041?2079?8824018930:000330000429204","8200420188=140003=000042878482002401880280003300004282079?881801","99?51?3<33000042820842080401680281003300004297800208420108014100","21000041?24002083<00?000:1001>0000008000000000000000000000000000","0000000000000000000000000000000000000000000000000000600183010000","000000000000000090024482001>000080<00408310090004084002:00018120","0<58890860008308002:000081200489120800010080002:000080<504890<00","00420480112:10008002850:34080043<300111:000081>14245090801?00000","110:00000000:2<6930800400000110:0000000145489508004000001;0:0000","000289=1270401?00000150:002000050853814200000000100:002000000000","004200000000100>004000000000003<4010<1448600004010<0020104003061","228486000030612241860:1400000000001?3<000000000000003060<1830628","42?=?;?7>7<?9?3>4891224489484281020401020408850:142850<840810204","01020408850:142850?>4081020401020408?=?;?7>?=?<840?9?3>7<1020408","850:142850<84081020401020408850:142850<84281020401020408850:1428","50<84281020401020408850:142850<?3<?=?;?7>7<?9?3>0000000000000800","0000000000000000000000001000000000000000005100430500000480218001","000000:0<1848:12000460<244860000?00000000000007800000010:0188989",">3<78?1>008=0:142850:024858:142850:100950:1428513>24854:142850:1","82950:1428492124>54:142850:144950:14284:2138852:142850:128:50:14","28462124852:142850:110:50:1428442122852:142850:128:50:1428443>22","891:142850:144<50:1428442022?119>3<78?1>8278?1>3<784207<00000000","0000008000000000000000000000000000800000000000000000000000000000","00000000000040100000040000401000020100002020<1400:00002020<00102","0<001041228484000010412240841214000000000000000000000000000078?1",">3<78?3>3<78?1>3<3060<18850:142850<942850:14210204081<3870>1<399","40850:142102040864<993264<:?40?=?;?7>1020408850:142850<840810204","010204088=1:3468=1<942850:142102040874>9=3:74>;>3<78?1>3<7<?9?3>","0000000000000800000000000000000000000000100000000000000000000000","0000000000000000000050010040000000000000000000002050808305000000","80218001200050:041048:120004404244822024080000000000000820800004","20007971>3<78?1>00790:142850:>42898:142850:100950:142850;142890:","142850:130950:142848:122890:142850:100:50:1428492124890:142850:1","?<:50:1428452114890:142850:100<51:3468<7311<7109>3<78?1>3078>9=3",":7422>08000000000000008000000012204800000000000000800000000<2030"};int getdotfont(v,x,y) int v,x,y;{ int adr,bit; adr = (v/16)*16*FONTWIDTH*FONTHEIGHT+(v%16)*FONTWIDTH+y*16*FONTWIDTH+x; bit = 3 - (adr & 3); adr /= 4; return ((font[adr/64][adr%64]>>bit)&1);}/*------------------------------ MAIN MODULE ------------------------------*/Ccimage ccputstring(in,x,y,c,C,r,str) Ccimage in; int x,y; int *c,*C; float *r; unsigned char *str;{ int nx,ny,cx,cy,sx,sy,dx,dy,adr,i,v,adr2; Curve thedisc; Point_curve p; nx = in->ncol; ny = in->nrow; if (r) thedisc = disc(*r,NULL); /* get string */ if (!str) { str = malloc(1001*sizeof(char)); for (i=0;i<1000 && ((v=getchar())!=EOF);i++) str[i] = v; if (v!=EOF) mwerror(WARNING,0,"string too long: only 1000 characters kept."); str[i]=(char)0; } /* put background if necessary */ if (r && *r!=0) { cx = x; cy = y; for (i=0;i<strlen(str);i++) { v = (int)str[i]; if (v==10) { cx = x; cy += FONTHEIGHT; } else { for (dx=0;dx<FONTWIDTH;dx++) for (dy=0;dy<FONTHEIGHT;dy++) if (cx+dx>=0 && cx+dx<nx && cy+dy>=0 && cy+dy<ny) { adr = (cy+dy)*nx+cx+dx; if (getdotfont(v,dx,dy)) for (p=thedisc->first;p;p=p->next) if (cx+dx+p->x>=0 && cx+dx+p->x<nx && cy+dy+p->y>=0 && cy+dy+p->y<ny) { adr2 = (cy+dy+p->y)*nx+cx+dx+p->x; in->red[adr2] = (((*C) / 100) * 255)/9; in->green[adr2] = ((((*C) /10) %10)* 255)/9; in->blue[adr2] = (((*C) %10)* 255)/9; } } cx += FONTWIDTH; } } } /* put string */ cx = x; cy = y; for (i=0;i<strlen(str);i++) { v = (int)str[i]; if (v==10) { cx = x; cy += FONTHEIGHT; } else { for (dx=0;dx<FONTWIDTH;dx++) for (dy=0;dy<FONTHEIGHT;dy++) if (cx+dx>=0 && cx+dx<nx && cy+dy>=0 && cy+dy<ny) { adr = (cy+dy)*nx+cx+dx; if (getdotfont(v,dx,dy)) { in->red[adr] = (((*c) / 100) * 255)/9; in->green[adr] = ((((*c) /10) %10)* 255)/9; in->blue[adr] = (((*c) %10)* 255)/9; } else if (!r) { in->red[adr] = (((*C) / 100) * 255)/9; in->green[adr] = ((((*C) /10) %10)* 255)/9; in->blue[adr] = (((*C) %10)* 255)/9; } } cx += FONTWIDTH; } } return(in);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -